【发布时间】:2014-03-03 03:07:06
【问题描述】:
所以我有一个函数可以给我随机位 rand(0,1) 我想把它推广到 rand(a,b) 给我一个 a 到 b 范围内的随机数。
我的想法是只计算 b - a 中的位数,然后将它们附加在一起。我认为这会起作用,但它不会是统一的。我觉得它会支持更大的数字,而不是更小的数字(更接近 a 的数字)。不是真的要求一个直截了当的答案,只是一些帮助会很好。
编辑: 这是我目前的想法,只是不确定制服部分
pseudo code:
function rand_range(a, b):
n = b - a
sum = a
for i in range(n):
sum += rand(0,1)
return sum
【问题讨论】:
-
为什么你认为得到的数字不统一?
-
我不太确定,似乎范围是否偏爱更高的值,因为我必须调用 rand 以获得与范围一样多的位,所以范围越高 rand调用和我的随机数的平均值越高。只是我的直觉,我不知道它可能完全有缺陷。
-
rand(a,b)是否返回整数a和b之间的整数? -
我认为真正的问题在于任意范围。如果 a = 0 和 b = 2 ** n - 1,你很好。但是如何处理其他类型的范围似乎很棘手。
-
是的,你得到的位数越多,平均值就越高。事实上,如果随机位生成器是真正随机的,那么在大量样本中,平均值将非常接近
(b-a)/2。但是使用随机位生成器,您生成00000的可能性应该与生成01101或任何其他 5 位序列的可能性一样。