我想从[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]其他任何方法都可以这样做吗?
答案 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