在小范围内均匀分布以产生精确的大概率

时间:2013-06-18 14:44:42

标签: php probability

目前,我使用统一分布来产生获胜概率。

对于让我们说1%的概率,我定义了一个中奖号码47然后我执行了mt_rand(1,100),如果号码为47则用户获胜。哪个没问题。

这适用于1/100'000这样的小概率,但当我想要让40% 1/0.4 = 2.5 mt_rand(1,2.5)的概率为mt_rand(1,2)

我无法mt_rand(1,3)我必须50%33%分别表示40%和{{1}}。

如何获得{{1}}概率?

2 个答案:

答案 0 :(得分:2)

假设您希望获胜概率为x(假设为整数),然后生成

$num = mt_rand (1,100)
if ($num<=$prob) {//user wins}

如果你没有$ prob作为整数并且是一个带有2位小数的数字,例如:47.23%,那么你可以生成

$num = mt_rand(1,10000)
if ($num/100 <= $prob), {//user wins}

同样,您可以将其扩展到您想要的任何精度

答案 1 :(得分:1)

if (mt_rand(1, 100) / $probability <= 1) {
    // success
}

E.g。如果你现在有$probability = 10;你有十(百)个案例,其中1到100之间的数字小于或等于一。