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

Victor Efimov victor на vsespb.ru
Чт Окт 2 02:15:48 PDT 2014


в 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 пользователь Вадим Власов
<scripter.vrn на gmail.com> написал:
> Привет всем, столкнулись со странным эффектом в 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
> moscow-pm на pm.org | http://moscow.pm.org
>


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