php 随机函数 实际概率和设置的概率有差异
php
<?php $result = array(); $configSet = array( 6 => 0.1, 5 => 1, 1 => 27, 2 => 27, 3 => 27, 4 => 17.9, ); $nums = 30000000; for($i=1;$i<$nums;$i++){ //srand((double)microtime(true)*1000000); srand((double)microtime(true)*1000000); $random = mt_rand(1, 1000000); $rand = 0; $thisID = 0; foreach($configSet as $k => $value){ $rand += $value * 10000; if($random <= $rand){ $thisID = $k; break; } } $result[$thisID] += 1; } foreach($result as $key => $value){ $result[$key] = round((float)($value / $nums) * 1000000)/10000; } ksort($result); print_r($result); ?>
结果是
Array
(
[1] => 26.985
[2] => 26.9879
[3] => 26.987
[4] => 17.9519
[5] => 0.9917
[6] => 0.0964
)
跑了很多次都是差不多的,
实际用户10000W次结果就有点问题
Array
(
[1] => 27.0581
[2] => 27.2639
[3] => 27.2125
[4] => 18.1036
[5] => 0.3031
[6] => 0.0588
)
怎么能保证小概率的时候波动小一点
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
把srand放到循环外
實際概率和設置概率有差異。。。
你怎麼知道實際概率是多少的?
你知道的只是頻率好不好。。。
你的問題本身就是錯的。
而頻率和概率不等幾乎是必然的。。。