1

在我的程序中,$integers[0]->occurrences 的平均值应该是 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);
        ?>
4

2 回答 2

1

你说你正在使用 WAMP。

PHPrand()在 Windows 上不是很随机(它只生成 15 位随机性),因此它无法在 50 个 bin 之间足够均匀地分配其随机数。

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

于 2012-07-17T23:18:52.327 回答
0

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

您还可以生成两个随机数并将它们连接起来以获得长的。

例如

//desired length of 16
rand16digits = str_pad(mt_rand(0,99999999), 8 , "0").mt_rand(10000000,99999999);
于 2012-07-17T23:37:05.730 回答