Rand函数产生不均匀的结果

时间:2012-07-17 22:58:29

标签: php random wamp

在我的程序中,$ integers [0] - >出现的平均值应该是20000.为什么它总是大于20000,即使在使用srand()之后?

<?php 
        define('NUM_OF_INTS',49);    
        define('DRAWS',1000000);

            class number
            {
               public $occurences;
               public $value;

               function number()                     
               {
                   $occurences=0;
                   $value=0;
               }
            }

            $integers = array();

            //srand(time(0));
            //initialising loop
            for($i=0;$i<=NUM_OF_INTS;$i++)
            {    
                $integers[$i] = new number(); 
                $integers[$i]->value = $i;

            }
            for($i=0;$i<DRAWS;$i++)
            {                  
                $integers[rand(0,NUM_OF_INTS)]->occurences++;               
            }

            foreach($integers as $int)
                printf("%5d %5d  <br/>",$int->value,$int->occurences);
        ?>

2 个答案:

答案 0 :(得分:1)

你说你正在使用WAMP。

PHP rand()在Windows上不是很随机(它只产生15位随机性),所以它无法在50个二进制位之间均匀地分配其随机数。

特别是,bin 0将收到656/32768的随机数,约为0.0200195

答案 1 :(得分:0)

您是否尝试过使用PHP的mt_rand作为生成器?获得均匀分布比rand更好。

你也可以生成两个随机数并连接它们以获得长数。

e.g。

//desired length of 16
rand16digits = str_pad(mt_rand(0,99999999), 8 , "0").mt_rand(10000000,99999999);