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

749

    Vastaukset 6

    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. Lääkäri Ari Miettinen kuollut 50-vuotiaana

      Sillähän on Youtubessa paljon videoita.
      Maailman menoa
      88
      2842
    2. 67
      993
    3. Romanttisinta

      Mitä hän on tehnyt sinulle?
      Ikävä
      70
      959
    4. Mikä on mielestäsi keskustelupalstan tarkoitus?

      Tuolla toisessa ketjussa kävi ilmi jotain minkä itse koen hieman hassuksi. Nykypäivänä yllättävän moni ilmeisesti kokee,
      Sinkut
      273
      826
    5. Nyt aletaan terveydenhuollossa karsimaan "turhista" operaatioista

      Eräitä toimia ei enää tehdä, vaan yritetään korvata halvemmilla. Nykyään esimerkiksi polven tähystysleikkaukset lähes l
      Maailman menoa
      135
      780
    6. Vieläkö se tarjous

      On voimassa?
      Ikävä
      57
      726
    7. Ttp:llä kuontalot ojennukseen

      Ttp n yrittäjä ilmoitti facessa, että ttp: n tiloihin tulee lokakuun eka vkl parturi. Se tulee parturoimaan vähävaraiste
      Haapavesi
      72
      661
    8. Ketä sinä sitten

      Rakastat?
      Ikävä
      39
      632
    9. Tämmöistähän tämä meillä ollut

      Sanatonta rakkautta.
      Ikävä
      46
      625
    10. Hyvää yötä.....M

      Miten me edettäs...............
      Ikävä
      66
      620
    Aihe