在我的程序中,$ 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);
?>
答案 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);