в 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
