PHP随机数生成问题 10000个循环 范围0-1 基本平均数:0.5 基准标准偏差:0.28867134595 ======================================= 兰特山() 平均数:0.337839939116 标准偏差:0.264176807272 --- hexdec(sha1(*GUID*)) 平均值:0.37834 标准偏差:0.284251515902
根据PHP随机数生成问题 10000个循环 范围0-1 基本平均数:0.5 基准标准偏差:0.28867134595 ======================================= 兰特山() 平均数:0.337839939116 标准偏差:0.264176807272 --- hexdec(sha1(*GUID*)) 平均值:0.37834 标准偏差:0.284251515902,php,math,random,statistics,probability,Php,Math,Random,Statistics,Probability,根据mt_rand是最好的现成PHP方法 然而,问题在于随机数的极小子集。如果在0和1之间生成random,则会得到非常小的偏差。因此,您可以在生成数字时增加数字,然后按最前面的数字进行划分 在我的跑步中,平均值为0.50015533,偏差为0.2901565152368 请记住,如果再次开始对值进行四舍五入以获得实际的0或1,则标准偏差将在0.5左右 守则: 10,000 Loops Range 0-1 Base Average: 0.5 Base Standard Deviation: 0.
mt_rand
是最好的现成PHP方法
然而,问题在于随机数的极小子集。如果在0和1之间生成random,则会得到非常小的偏差。因此,您可以在生成数字时增加数字,然后按最前面的数字进行划分
在我的跑步中,平均值为0.50015533
,偏差为0.2901565152368
请记住,如果再次开始对值进行四舍五入以获得实际的0
或1
,则标准偏差将在0.5左右
守则:
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
---
您希望得到什么样的输出?10000个介于0和1之间的随机数,平均输出0.5,标准偏差为0.288675195(1/sqrt(12))没有问题。我确实看到我有一个$start=1
,应该是$start=0
。现在更新。您还可以将顶部用作mt\u getrandmax()
。还有你的随机浮动以获得最佳效果
<?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;
?>