重点是每个数字产生的概率要相同。
例如,rand5生成从1-5,每个数字的概率为0.2
如果只用7个rand5相加来生成的话,概率是两边的数小,中间的数大。
正确产生的方式如下:
num=5*(rand5-1)+rand5-1
if(num<21)
print num%7+1;
其中5*(rand5-1)生成等概率的数0,5,10,15,20,而后面的rand5-1生成等概率的0,1,2,3,4
这样两个数相加,就可以得到等概率的0-24.
这个时候取0-20就可以等概率的区分,rand7的每个数字在这其中出现了3次,概率相等。
本文介绍了一种将[1,5]区间内的均匀分布随机数转换为[1,7]区间内均匀分布随机数的方法。通过数学组合的方式,确保了最终生成数字的概率相等。具体实现包括使用rand5生成0到24范围内的随机数,并从中筛选出0到20的数以匹配rand7的需求。
1774

被折叠的 条评论
为什么被折叠?



