php 随机函数 实际概率和设置的概率有差异

发布于 2022-08-31 20:23:14 字数 1155 浏览 36 评论 0

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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

一梦等七年七年为一梦 2022-09-07 20:23:14

把srand放到循环外

萌无敌 2022-09-07 20:23:14

實際概率和設置概率有差異。。。

你怎麼知道實際概率是多少的?

你知道的只是頻率好不好。。。

你的問題本身就是錯的。

而頻率和概率不等幾乎是必然的。。。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文