10,000 Loops
Range 0-1
Base Average: 0.5
Base Standard Deviation: 0.288675134595
=======================================
mt_rand()
Average: 0.337839939116
Standard Deviation: 0.264176807272
---
hexdec(sha1(*GUID*))
Average: 0.37834
Standard Deviation: 0.284251515902 <--
---
mt_rand() based from a SET of defined numbers [01234567899]
Average: 0.496042248107 <--
Standard Deviation: 0.321017564651
---
请有人帮忙,我似乎无法找到一种方法来生成符合0和1之间连续均匀分布的RANDOM数字。
答案 0 :(得分:3)
根据php-best-random-numbers,mt_rand
是最好的开箱即用PHP方法。
但问题在于您的随机数非常小。如果在0和1之间生成随机数,则会出现非常小的偏差。因此,您可以在生成数字时增加数字,然后将其排除在最前面的数字之外。
Check this codepad我的平均0.50015533
和0.29015651152368
的偏差。
请注意,如果您再次开始舍入值以获得实际值0
或1
,则您的标准偏差将在0.5
左右。
代码:
<?php
$start = 0;
$top = 10000;
$ar = array();
for ($x=1;$x<=10000;$x++) {
$val = mt_rand($start, $top) / $top;
$ar[] = $val;
}
$mean = array_sum($ar) / sizeof($ar);
$devs = array();
foreach($ar as $num) {
$devs[] = pow($num - $mean, 2);
}
$standard_deviation = sqrt(array_sum($devs) / sizeof($devs));
echo 'Max: ' . max($ar);
echo chr(10);
echo 'Min: ' . min($ar);
echo chr(10);
echo 'Average: ' . $mean;
echo chr(10);
echo 'Deviation: ' . $standard_deviation;
?>