Python - 随机数在 0 和 1 之间的概率

Python - probability of a random number between 0 and 1

我知道我们使用 random.random() 生成一个介于 0 和 1 之间的随机小数。 随机数小于 .5 的概率是否等于 50%? 并且随机数大于0.5等于50%?

是的。来自文档:

Almost all module functions depend on the basic function random(), which generates a random float uniformly in the semi-open range [0.0, 1.0). Python uses the Mersenne Twister as the core generator.

自己测试的小片段。但查德米勒所说的似乎是最正确的答案。与生成小于 0.5 的数字的概率相比,生成大于 0.5 的数字的概率确实总是略低。 这是因为 (0.5,1.0) 是 比 [0.0,0.5] 更小的无限数字集,因为包含 0.0 而排除 1.0。

import random

N_ITER = 10000000
results_greater = 0
results_lesser = 0
for i in xrange(N_ITER):
    random_number = random.random()
    results_greater += random_number > 0.5
    results_lesser += random_number < 0.5
print results_greater / float(N_ITER)
print results_lesser / float(N_ITER)

使用以下方法进行快速测试后:

import random

random.seed( None )

less_than_half = 0
greater_than_half = 0
equal_to_half = 0

for i in range( 0, 2**26 ):
    x = random.random()
    if x < .5:
        less_than_half += 1
    elif x > .5:
        greater_than_half += 1
    else:
        equal_to_half += 1

print less_than_half
print greater_than_half
print equal_to_half

运行 四次(由于内存错误),我总共有 134,217,147 个结果小于 .5,134,218,309 个结果大于 .5,none 等于 .5。 这导致总共 49.9997836% 的结果小于 .5。

实际结果可能因系统时钟的种子而异。