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


Pick a number based on probability in floating number PHP

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

示例:

Side    Probability
1       3.63098
2       18.38200
3       10.59424
4       3.87055
5       13.66651
6       49.85572
Total:  100

因此,侧面6应该比其他侧面滚动得最频繁。我尝试了以下方法:

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

生成一个随机数CCD_ 1,并根据其所在位置选择一个数字。

然而,它并不真正适用于浮点数,最大概率不需要100它可以是23.994,并将随机分布到6侧。

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

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

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

只需将生成的随机数除以RAND_MAX,然后检查它在[0,1]的哪个范围内。

首先对概率进行归一化,使其位于[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