While tai For mitä eroa?

Jokerer

Kyseessä on siis C kieli. Onko mitään nopeus jne... eroa jos käyttää for tai while looppia?

Luuppi pyörii kymmeniä miljoonia kertoja.

6

718

    Vastaukset

    Anonyymi (Kirjaudu / Rekisteröidy)
    5000
    • c-kuru

      while on nopiampi, koskapa se suorittaa lohkon yhden kerran tarkistammatta ehtoa....

      Etu on mittava, jos silmukka pyörii kymmeniä moljoonia kertoaj ;)

      • Siis mitä ihmettä ? Kyllä se while tarkistaa aina annetun ehdon ennen kuin lohkoa aletaan suorittamaan. Eihän siinä edes olisi mitään järkeä, jos while ei tarkistaisi sitä ehtoa joka kierroksella.

        Sen sijaan do { ... } while(...) ajaa lohkon aina vähintään kerran, jos sitä tarkoitit.


    • Unrolling

      Riippuu kääntäjästä. Tietenkin käytät kaikkia optimointioptioita (heh) ja kehotat erityisesti unrollaamaan silmukat, mikä vaikkapa gcc:llä tapahtuu optiolla -funroll-loops (tjsp).

      Sitten testaat, ja pidät nopeimman löytämäsi version koodissa. Niin se käy. Ei tuohon voi antaa yleistä vastausta, koska eri kääntäjä tekee eri ratkaisuja.

      Arvaisin kyllä, että hyvä kääntäjä tuottaisi samaa koodia kummastakin silmukasta, jos logiikka on muuten vastaava. Vaan ei sitä tiedä, ellei kokeile.

      Jos epäilet, että joudut käsin ohjelmoimaan, for-silmukka lienee helpompi unrollata käsin. Loop unrolling on hyvä googlehakutermi, jos et todellakaan tiedä msitä puhun.

    • hakoteillä

      ohjelmissa ongelmat ovat ihan muualla kuin tuossa kysymyksessä.

    • jep jep

      pistä looppi laskemaan alaspäin

      int loop = 500;


      do {

      } while ((--loop) != 0);

      nollan tarkistaminen on helpompaa (etenkin -- jälkeen) kuin ehdon i < 500.

      mutta kuten tuolla on mainittu kannataa viilata algorytmiä, tämä on pilkun viilausta.

    • Jokerer

      Kiitoksia kaikille. Siis for ja while ei ole nopeus eikä muutakaan eroa ja on ihan makuasia kumpaa käyttää. En varsinaisesti kaipaa nopeutta ohjelmaani lisää, mutta koodaus vaiheessa on ihan sama kumman naputtelee joten aattelin vain varmistaa kumpaa kannattaa käyttää. Ja periaatteessa nopeutta ei ole koskaan likaa.

      Ainakin PHP kanssa kehotetaan käyttää while for sijasta koska se on nopeempa isommissa loopeissa. Joskin PHP on PHP.

    Ketjusta on poistettu 0 sääntöjenvastaista viestiä.

    Luetuimmat keskustelut

    1. Kanki kovana; ei tiedä pornovideoista mitään

      Kaikkosen erityis­avustajan asunnossa kuvattiin pornoa. Väittää ettei tiedä asiasta yhtään mitään. https://www.is.fi/po
      Maailman menoa
      121
      6020
    2. Halaisin sua mies

      Jos voisin 💗
      Ikävä
      29
      2110
    3. Onkohan meillä kummallakin joku pakkomielle toisiimme

      Vähän luulen että on..
      Ikävä
      177
      1942
    4. Ei monet elä kuin alle 60 v, mikä vaikuttaa?

      gulp, gulp.. Juice Leskinen eli 56 vuotta. Matti Nykänen eli 55 vuotta. Topi Sorsakoski eli 58 vuotta.
      Maailman menoa
      66
      1114
    5. Mitä tämä on

      Ajatella, olen viimeksi nähnyt sinua melkein vuosi sitten ohimennen. Ja silloinkin sinä välttelit minua. En ole kuullut
      Tunteet
      10
      1113
    6. Hyvää yötä kaivatulleni

      En pysty tekemään kokemaan mitään sielussa tuntuvaa, syvää, vaikuttavaa, ilman että rinnastan sen sinuun. Niin kävi tänä
      Tunteet
      24
      997
    7. Olen valmis

      Kohtaamaan sinut tänä kesänä, jos sellainen sattuma osuu kohdalleni.
      Ikävä
      73
      987
    8. Nyt on konstit vähänä.

      Nimittäin tuulivoiman vastustajilla, kun pitää perättömiä ilmiantoja tehdä. Alkaa olla koko vastustajien sakki leimattu,
      Kiuruvesi
      24
      902
    9. Tilinpäätösvaltuusto 27.5

      Samalla viimeinen kokous ennen uudenvaltuustokauden alkamista. Vanhat antavat itselleen erinomaiset arvosanat, ja siirty
      Pyhäjärvi
      42
      887
    10. Hevoset ajoteillä Karhulanvaaralla

      Minkä ihmeen takia osaamattomat ihmiset tuovat hevosia ajoteille ja pyöräteille? Eilen oli kolari lähellä tämän takia. I
      Suomussalmi
      12
      755
    Aihe