Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C++ while vs. for

juha127 [21.12.2005 15:53:45]

#

Kumpi mahtaa olla toiminnaltaan nopeampi while vai for silmukka?

Metabolix [21.12.2005 16:09:13]

#

Aika lailla samaan muottiin ne käännettäessä päätyvät kuitenkin. On siis käytännössä aivan sama, kumman näistä valitset:

for (i = 0; i < 100; i++)
{
  // Koodia...
}
i = 0;
while (i < 100)
{
  // Koodia...
  i++;
}

Tietenkin marginaalinen nopeutus syntyy, jos while käännetään do-while-silmukaksi, koska silloin vertailu suoritetaan yhden kerran vähemmän.

i = 0;
do {
  // Koodia...
  i++;
} while (i < 100);

Silmukan nopeus itse silmukkarakenteen puolesta tuskin tulee koskaan olemaan merkittävä hidaste. (Paitsi jos ratkoo Putkapostia raa'alla voimalla :)

juha127 [21.12.2005 16:15:41]

#

Metabolix kirjoitti:

(Paitsi jos ratkoo Putkapostia raa'alla voimalla :)

No siihenhän sitä nopeutta haen. Ei jaksaisi odotella ku oma scriptini on niin hidas ja toimii kaiketi kahdella while silmukalla, että mahtaisiko aika muuttua jos muuttaisi silmukan for:iin tai do-while. Kaiketi pitää vain olla kärsivällinen ja odottaa tai mennä takaisin sorvin ääreen.

Blaze [21.12.2005 16:35:12]

#

Metabolix kirjoitti:

(Paitsi jos ratkoo Putkapostia raa'alla voimalla :)

Joka on täysin tuhoontuomittu yritys. Oma kohtalaisesti optimoitu bruteforsaajani (ei käytä kuin bitshiftejä ja yhteenlaskuja) tuhoaa lukua 123456789 27 sekuntia ja lukua 1234567898 päälle 5 minuuttia 2GHz koneella. Isompia en ole viitsinyt kokeillakaan.

Tätä putkapostia ei voimalla ratkasta.

juha127 [21.12.2005 16:41:28]

#

Tuota pitänee vielä kehittää. Ja mun vie opiskel C++ ku alotin vast viime viikol. Ja 1.7GHz Intel Celeronilt menee laskee toi 12345 jotai 8 s

EDIT
Noh ku muutin pari kohtaa niin aikaa luvun 12345678 hajottamiseen meni 35 s ja win mediaplayer oli pääl samal aikaa.

Jaska [21.12.2005 17:46:08]

#

Varmaan while- ja for-silmukoiden toteutuksesta voi katsoa tarvittavat kellojaksot, olettaen, että käytät avoimen lähdekoodin kääntäjää.

Minä käytän for-silmukkaa silloin, kun minun pitää käydä lävitse kaikki silmukan arvot, while-silmukkaa jos silmukka on mahdollista lopettaa käymättä kaikkia arvoja lävitse.

FooBat [21.12.2005 21:15:41]

#

Jaska kirjoitti:

Varmaan while- ja for-silmukoiden toteutuksesta voi katsoa tarvittavat kellojaksot, olettaen, että käytät avoimen lähdekoodin kääntäjää.

Ihan samoiksi käskyksi ne molemmat silmukkarakenteet muuttuvat. Eli ne molemmat pelkistyvät totuusarvon laskentaan, yhteen branch ja yhteen hyppy-käskyyn. Tosin ei ole ollenkaan yksinkertaista nähdä kääntäjän koodin perusteella, mitä se lopulta tulostaa tietystä ohjelmakoodista. Erilaisia optimointimahdollisuuksia kun on aika lailla. Ei ole myöskään aivan selvää, kuinka nopeasti syntynyt ohjelma toimii, koska branch-käskyjen nopeus riippuu siitä kuinkä hyvin kääntäjä ja prosessori onnistuu arvaamaan kumpaa koodihaaraa missäkin tilanteessa pitää jatkaa.

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta