Так это самое.. в доке как раз написано "Most implementations" "To be safe, always pass srand an integer.". Т.е. это поведение не документировано, гарантий нет. Поломали значит, его, без сожаления, когда что-то исправляли. Например, могли исправлять баг с генератором под win32, заодно общий код затронули.
2 октября 2014 г., 14:18 пользователь Вадим Власов <[email protected]> написал: > Ну да, про truncate понятно, не понятно, почему в 5.18 в нашем случае в > большую сторону округляет. > При этом, если явно подставить дробное число, тоже транкейтит, так же как и > в 5.14: > > [scripter@dev-vbox:~]$ perl -v | fgrep version && perl -E 'srand(3.9); say > rand' > This is perl 5, version 14, subversion 2 (v5.14.2) built for > x86_64-linux-gnu-thread-multi > 0.783234962103055 > > scripter@work-desktop:~$ perl -v | fgrep version && perl -E 'srand(3.9); say > rand' > This is perl 5, version 18, subversion 2 (v5.18.2) built for > x86_64-linux-gnu-thread-multi > 0.783234962103055 > > > И даже если вычислять аргумент, все равно идентичное поведение: > > [scripter@dev-vbox:~]$ perl -v | fgrep version && perl -E 'srand(7.8/2); say > rand' > This is perl 5, version 14, subversion 2 (v5.14.2) built for > x86_64-linux-gnu-thread-multi > 0.783234962103055 > > scripter@work-desktop:~$ perl -v | fgrep version && perl -E 'srand(7.8/2); > say rand' > This is perl 5, version 18, subversion 2 (v5.18.2) built for > x86_64-linux-gnu-thread-multi > 0.783234962103055 > > > 2 октября 2014 г., 13:15 пользователь Victor Efimov <[email protected]> > написал: > >> в perldoc >> == >> Most implementations of srand take an integer and will silently >> truncate decimal numbers. This means srand(42) will usually produce >> the same results as srand(42.1). To be safe, always pass srand an >> integer. >> == >> >> p.s. мучался с предсказуемыми последовательностями псевдослучайных >> чисел - советовали другой генератор >> http://perlmonks.org/?node_id=1054438 >> >> >> 2 октября 2014 г., 13:05 пользователь Вадим Власов >> <[email protected]> написал: >> > Привет всем, столкнулись со странным эффектом в 5.18 >> > >> > [scripter@dev-vbox:~]$ perl -v | fgrep ver >> > This is perl 5, version 14, subversion 2 (v5.14.2) built for >> > x86_64-linux-gnu-thread-multi >> > [scripter@dev-vbox:~]$ perl -E '$dd = "20141002"; say 0.8 * $dd * $dd + >> > 1.55 >> > * $dd + 59.3; say int( 0.8 * $dd * $dd + 1.55 * $dd + 59.3 );' >> > 324528000469816 >> > 324528000469815 >> > [scripter@dev-vbox:~]$ perl -E '$dd = "20141002"; srand( 0.8 * $dd * $dd >> > + >> > 1.55 * $dd + 59.3 ); say rand()' >> > 0.261590199385868 >> > [scripter@dev-vbox:~]$ perl -E '$dd = "20141002"; srand( int(0.8 * $dd * >> > $dd >> > + 1.55 * $dd + 59.3) ); say rand()' >> > 0.261590199385868 >> > >> > В 5.14 аргумент srand приводится к целому с отбраыванием дробной части, >> > так >> > же как с int. >> > >> > >> > scripter@work-desktop:~$ perl -v | fgrep ver >> > This is perl 5, version 18, subversion 2 (v5.18.2) built for >> > x86_64-linux-gnu-thread-multi >> > scripter@work-desktop:~$ perl -E '$dd = "20141002"; say 0.8 * $dd * $dd >> > + >> > 1.55 * $dd + 59.3; say int( 0.8 * $dd * $dd + 1.55 * $dd + 59.3 );' >> > 324528000469816 >> > 324528000469815 >> > scripter@work-desktop:~$ perl -E '$dd = "20141002"; srand( 0.8 * $dd * >> > $dd + >> > 1.55 * $dd + 59.3 ); say rand()' >> > 0.132392508051456 >> > scripter@work-desktop:~$ perl -E '$dd = "20141002"; srand( int(0.8 * $dd >> > * >> > $dd + 1.55 * $dd + 59.3) ); say rand()' >> > 0.261590199385868 >> > scripter@work-desktop:~$ perl -E '$dd = "20141002"; srand( int(0.8 * $dd >> > * >> > $dd + 1.55 * $dd + 59.3)+1 ); say rand()' >> > 0.132392508051456 >> > >> > А в 5.18 округляется, так же как при выводе. Почему так? Такое поведение >> > описано где-то? >> > >> > -- >> > С уважением, >> > Вадим Власов >> > т.: +7 (916) 424-00-72 >> > >> > -- >> > Moscow.pm mailing list >> > [email protected] | http://moscow.pm.org >> > >> -- >> Moscow.pm mailing list >> [email protected] | http://moscow.pm.org > > > > > -- > С уважением, > Вадим Власов > т.: +7 (916) 424-00-72 > > -- > Moscow.pm mailing list > [email protected] | http://moscow.pm.org > -- Moscow.pm mailing list [email protected] | http://moscow.pm.org
