如何从一个短随机数生成更长的随机数?

时间:2011-01-26 13:10:24

标签: random numbers

我有一个简短的随机数输入,比如说int 0-999。

我不知道输入的分布。现在我想根据输入生成0-99999范围内的随机数而不改变分布形状。 我知道有一种方法可以通过将其除以999然后将多个99999除以得到结果来输入[0,1]。但是,此方法并未涵盖所有可能的值,例如99999永远不会被命中。

2 个答案:

答案 0 :(得分:1)

假设您的输入是某种随机性来源......

您可以连续两个输入并合并它们:

input() + 1000*(input()%100)

但要小心。这依赖于具有大量熵的源,因此给定的输入数字并不总是跟随相同的后续输入数字。如果您的源是PRNG,设计为以某种方式在0-999之间循环,则此技术将无效。

对于大多数生产熵源(例如/ dev / urandom),这应该可以正常工作。 OTOH,带有生产熵源,你可以直接在0-99999之间取一个随机数。

答案 1 :(得分:0)

您可以尝试以下内容:

(input * 100) + random

其中random是0到99之间的随机数。

问题是输入仅指定要使用的100个范围。例如50只是说你将有一个介于5000和5100之间的数字(以保持类似的形状分布)。选择5000到5100之间的数字取决于您。