Python 的 random() 函数有多准确?
假设我想根据1 / 234276901
抛硬币的概率做出决定,我还可以使用
if random() < 1. / 234276901:
陈述?
这样的陈述有多准确?(就实际概率而言,如果将被采用)。
是否有更精确(但在合理时间内运行)的方式来获得这样的硬币翻转?
Python 的 random() 函数有多准确?
假设我想根据1 / 234276901
抛硬币的概率做出决定,我还可以使用
if random() < 1. / 234276901:
陈述?
这样的陈述有多准确?(就实际概率而言,如果将被采用)。
是否有更精确(但在合理时间内运行)的方式来获得这样的硬币翻转?
random.random()
产生一个范围为 [0.0, 1.0) 的浮点值(这意味着它0.0
包含在可能的值中,但1.0
不是)。
浮点数具有 53 位精度,因此您在 0.0 和 1.0 之间得到 2 ** 53 个不同的“步长”。53 位是足够的精度来表示1 / 234276901
,它只需要大约 28 位:
>>> 234276901 .bit_length()
28
所以是的,使用random.random() < 1 / 234276901
会起作用,还有很多精度。
如果您想获得 1 / 234276901 的硬币翻转,请random.random()
像这样使用:
>>> floor(random.random() * 234276901)
由于random()
给出了 0 到 1 之间的实数值,我们应该将其乘以您的最大值以拉伸间隔,而不是舍入值以将它们转换为整数。
您还可以使用random.randint()
:
>>> random.randint(1,234276901)