<div dir="ltr">Привет всем, столкнулись со странным эффектом в 5.18<div><br></div><div><div>[scripter@dev-vbox:~]$ perl -v | fgrep ver<br></div><div><div>This is perl 5, version 14, subversion 2 (v5.14.2) built for x86_64-linux-gnu-thread-multi</div><div>[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 );'</div><div>324528000469816</div><div>324528000469815</div><div><b>[scripter@dev-vbox:~]$ perl -E '$dd = "20141002"; srand( 0.8 * $dd * $dd + 1.55 * $dd + 59.3 ); say rand()'</b></div><div><b>0.261590199385868</b></div><div>[scripter@dev-vbox:~]$ perl -E '$dd = "20141002"; srand( int(0.8 * $dd * $dd + 1.55 * $dd + 59.3) ); say rand()'</div><div>0.261590199385868</div></div><div><br></div><div>В 5.14 аргумент srand приводится к целому с отбраыванием дробной части, так же как с int.</div><div><br></div><div><br></div><div><div>scripter@work-desktop:~$ perl -v | fgrep ver</div><div>This is perl 5, version 18, subversion 2 (v5.18.2) built for x86_64-linux-gnu-thread-multi</div><div>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 );'</div><div>324528000469816</div><div>324528000469815</div><div><b>scripter@work-desktop:~$ perl -E '$dd = "20141002"; srand( 0.8 * $dd * $dd + 1.55 * $dd + 59.3 ); say rand()'</b></div><div><b>0.132392508051456</b></div><div>scripter@work-desktop:~$ perl -E '$dd = "20141002"; srand( int(0.8 * $dd * $dd + 1.55 * $dd + 59.3) ); say rand()'</div><div>0.261590199385868</div><div>scripter@work-desktop:~$ perl -E '$dd = "20141002"; srand( int(0.8 * $dd * $dd + 1.55 * $dd + 59.3)+1 ); say rand()'<br></div><div>0.132392508051456</div><div><br></div><div>А в 5.18 округляется, так же как при выводе. Почему так? Такое поведение описано где-то?</div><div><br></div>-- <br><div dir="ltr"><div>  С уважением,<br></div><div>  Вадим Власов</div><div>  т.: +7 (916) 424-00-72</div></div>
</div></div></div>