根据浮动数PHP中的概率选择一个数字

时间:2013-12-04 18:03:16

标签: php algorithm probability

我正在尝试创建一个骰子游戏,你可以获得一个6面骰子然后滚动,但是每一方的概率都是预定义的(不公平)。

示例:

Side    Probability

1       3.63098
2       18.38200
3       10.59424
4       3.87055
5       13.66651
6       49.85572

Total:  100

所以Side 6 应该比其他任何人更频繁地滚动。我尝试了以下方法:

3.63098 + 18.38200 + 10.59424 + 3.87055 + 13.66651 + 49.85572 = 100

并生成一个随机数:rand(0, 100)并根据其撒谎的位置选择一个数字。

然而,它并不适用于浮点数,最大概率没有 100 可以是23.994,将随机分配到6个方面。

请建议使用算法或在哪里寻找算法,我不是要求为我编写代码只需要研究但不知道要寻找什么。

2 个答案:

答案 0 :(得分:3)

您可以生成介于0和RAND_MAX之间的随机数。

然后通过除以100并乘以RAND_MAX将每个概率缩放到RAND_MAX。您可以获得更准确的概率结果。

OR

将生成的随机数除以RAND_MAX并检查它所在的[0,1]范围。

答案 1 :(得分:2)

首先将概率归一化到[0,1]

之内

规范化prob(p) = value(p)/(sum of all values)

然后找到每个变量的值范围,例如

1 => 0.2
2 => 0.3
3 => 0.1
4 => 0.2
5 => 0.1
6 => 0.1

then ranges will be:-

1 =>[0,0.2]
2 =>(0.2,0.5]
3 =>(0.5,0.6]
4 =>(0.6,0.8]
5 =>(0.8,0.9]
6 =>(0.9,1.0]

然后对于骰子滚动,在范围[0,1]

中生成随机浮动

找到它所包含的范围

例如。随机浮动= 0.37然后在顶部将是2