我有一个简短的随机数输入,比如说int 0-999。
我不知道输入的分布。现在我想根据输入生成0-99999范围内的随机数而不改变分布形状。 我知道有一种方法可以通过将其除以999然后将多个99999除以得到结果来输入[0,1]。但是,此方法并未涵盖所有可能的值,例如99999永远不会被命中。
答案 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之间的数字取决于您。