Perl's rand的争论有多大?

Tim*_*Tim 5 random perl

rand(n)返回0和之间的数字n.rand关于"随机性",对于我平台上的整数限制的所有参数,是否会按预期工作?

ont*_*ia_ 8

这取决于你的randbits价值:

rand调用系统的随机数生成器(或者编译到Perl副本中的任何一个).对于这个讨论,我将调用生成器RAND来区分它与rand,Perl的功能.RAND产生一个从0到2**randbits - 1的整数,其中randbits是一个小整数.要查看perl中的内容,请使用命令'perl -V:randbits'.常用值为15,16或31.

当您使用参数arg调用rand时,perl将该值作为整数并计算此值.

                        arg * RAND
          rand(arg) = ---------------
                        2**randbits
Run Code Online (Sandbox Code Playgroud)

该值将始终落在所需的范围内.

          0  <=  rand(arg)  < arg
Run Code Online (Sandbox Code Playgroud)

但是,随着arg与2**randbits相比变大,事情变得有问题.让我们想象一个randbits = 15的机器,所以RAND的范围是0..32767.也就是说,每当我们调用RAND时,我们得到32768个可能的值之一.因此,当我们调用rand(arg)时,我们得到32768个可能的值之一.