【问题标题】:PHP rate to chance for event to happenPHP 发生事件的概率
【发布时间】:2012-02-08 16:07:52
【问题描述】:

我正在尝试做的(但完全混淆了)是在 PHP 中编写一个代码,该代码根据以十进制数字(最大 10 位小数)给出的机会执行代码,其中 1 是 100% 的机会为要执行的代码。这是我尝试过但无法正常工作的方法:

<?php
/*
    Rate to chance.
*/

//max 10 decimals
$rate = '0.010000000000'; //<-- should equal 1% chance

$chance = $rate*pow(10,10);

$random = mt_rand(0,pow(10,10));

if($random < $chance) { 
    echo "Ok."; //should be shown 1 out of 100 times in this example
}
?>

我之所以要进行这项工作是因为我希望代码执行的几率小于 1%(例如 0.001%)。我的代码(上面)不起作用,我可能在做一些非常愚蠢和完全错误的事情,但我希望其他人能帮助我,因为目前我完全糊涂了。

提前致谢。

最好的问候, Skyfe。

【问题讨论】:

    标签: php random probability


    【解决方案1】:

    pow 走错路了,是1/rate

    <?php
    // 1 chance out of 2, 50%
    if (mt_rand(0, 1) === 0) {
       …
    }
    // 1 chance out of 101, which is < 1%
    if (mt_rand(0, 100) === 0) {
        …
    }
    
    $rate = (double) '0.01';
    $max = 1 / $rate; // 100
    if (mt_rand(0, $max) === 0) {
        // chance < $rate
    }
    

    【讨论】:

    • 啊当然!谢谢你,我很愚蠢>_
    • PHP 会 int 它,就像你这样做一样:$max = (int) (1 / $rate);
    • 通用机会计算器怎么样?
    • 请注意,这并不准确。如果 $rate 为 0.5,我们希望 2 次中有 1 次机会。但这给出了 mt_rand(0, 2) === 0,即 3 次中有 1 次机会。同样适用于 1%。 mt_rand(0, 100) 是 101 次中的 1 次。
    • @StephaneMombuleau 这正是问题所在,机会必须小于$rate。我同意你的观点,这不是一个人应该如何处理概率。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-02
    • 1970-01-01
    • 2012-05-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多