【发布时间】:2010-10-01 13:29:48
【问题描述】:
我想在给定范围内生成均匀分布的随机整数。我使用的解释型语言有一个内置的快速随机数生成器,它返回一个介于 0(含)到 1(含)范围内的浮点数。不幸的是,这意味着我不能使用 standard solution seen in another SO question(当 RNG 返回 0(含)到 1(不含)之间的数字时)在给定范围内生成均匀分布的随机整数:
result=Int((highest - lowest + 1) * RNG() + lowest)
目前我能看到的唯一合理的方法是在极少数情况下随机数生成器返回 1 来请求一个新数字。
但如果有人知道更好的方法,我会很高兴听到它。
罗伯
注意:将现有的随机数生成器转换为这种语言会导致速度非常慢,所以恐怕这不是一个可行的解决方案。
编辑:链接到实际的 SO 答案。
【问题讨论】:
-
您还没有解释为什么上面的解决方案不起作用。如果随机数生成器是随机数的良好近似,那么其结果的分布应该是均匀的,计算的结果也是如此。
-
因为 RNG 的范围是 0(含)到 1(含),我们最终可能会得到 result=highest+1(即超出所需范围)