如何从[0,1]生成随机数?

时间:2016-04-10 12:22:17

标签: python random

我想从[0,1]中生成随机数。

import os

int.from_bytes(os.urandom(8), byteorder="big") / ((1 << 64) - 1)

上面的代码在我的python版本中不起作用。

另外

import random

random.random() 

只从[0,1)生成随机变量而不包括1.我希望它完全是[0,1]其他任何方法都可以这样做吗?

1 个答案:

答案 0 :(得分:2)

使用Python的random模块:

import random

# int
x = random.randint(0, 1)  # 0 or 1(both incl.)

# float excl. 1.0
x = random.random()  # float from [0,1)

或者,如@ajcr所指出并描述here

# from [0.0, 1.0], but upper boundary not guaranteed
x = random.uniform(0, 1)  

由于float的精确度和舍入问题适用于所有这些方法,因此可以尝试欺骗并使用decimal模块:

import decimal

def randfloat():
    decimal.getcontext().prec = 10  # 10 decimal points enough?!
    return decimal.Decimal(0) + decimal.Decimal(random.uniform(0, 1))
# this should include both boundaries as float gets close enough to 1 to make decimal round

>>> decimal.Decimal(0) + decimal.Decimal(0.99999999999)
Decimal('1.000000000')

# while uniform() apparently guarantees the inclusion of the lower boundary