1

私のプログラムでは、$ integers [0]->occurencesの平均値は20000である必要があります。srand()を使用した後でも、なぜ常に20000より大きいのですか?

<?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個のビン間で乱数を十分に均等に分散することはできません。

特に、ビン0は約0.0200195である656/32768の乱数を受け取ります。

于 2012-07-17T23:18:52.327 に答える
0

PHPのmt_randをジェネレーターとして使用してみましたか?ランドよりも均等に配分する方が優れています。

また、2つの乱数を生成し、それらを連結して長いものを取得することもできます。

例えば

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