我正在尝试创建一个骰子游戏,在这个游戏中,你会得到一个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