[Moscow.pm] странности округления и srand

Вадим Власов scripter.vrn на gmail.com
Чт Окт 2 02:05:27 PDT 2014


Привет всем, столкнулись со странным эффектом в 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
----------- следущая часть -----------
Вложение в формате HTML было извлечено…
URL: <http://mail.pm.org/pipermail/moscow-pm/attachments/20141002/b19cd723/attachment.html>


Подробная информация о списке рассылки Moscow-pm