Vlákno názorů k článku Perličky: práce se seznamy od anonym - tenhle operator muze byt velice zradny, obzvlast u...

  • Článek je starý, nové názory již nelze přidávat.
  • 11. 2. 2008 11:24

    anonymní

    tenhle operator muze byt velice zradny, obzvlast u vetsich cisel. napriklad (pokus o generovani rady telefonnich cisel):

    print "$_\n" for 420464647470..420464647479;
    

    zpusobi chybu "Range iterator outside integer range", pritom s "rucni" iteraci vsechno funguje bez problemu:

    for ($_=420464647470; $_ <= 420464647479; $_++) {
     print "$_\n";
    }
    
  • 11. 2. 2008 16:07

    Michal Svoboda

    Mne to funguje (protoze mam 64 bitu :-)

    Nicmene vtip je v tom, ze pri "rucni" iteraci iterujete pres floaty, ackoliv to neni videt. Range operator "umi" jen integery. Pro overeni muzete zkusit nasledujici kod.

    for ($_ = 48446744073709551616; $_ <= 48446744073709551620; $_++) {     
        print "$_\n"; 
    }

    V tomto pripade uz neni ani float schopen reprezentovat uvedena cisla s presnosti na jednicku. Program se zacykli. (Pokud ne, muzete ta cisla jeste o par radu natahnout.) Nejjednodussi naprava je pouzit use bignum; na zacatku kodu.

    (Podobny problem/reseni bude i v ukazkovem programu na pocitani Pascalova trojuhelniku.)