0

Python 的 random() 函数有多准确?

假设我想根据1 / 234276901抛硬币的概率做出决定,我还可以使用

if random() < 1. / 234276901:

陈述?

这样的陈述有多准确?(就实际概率而言,如果将被采用)。

是否有更精确(但在合理时间内运行)的方式来获得这样的硬币翻转?

4

2 回答 2

1

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会起作用,还有很多精度。

于 2015-12-20T17:00:44.137 回答
0

如果您想获得 1 / 234276901 的硬币翻转,请random.random()像这样使用:

>>> floor(random.random() * 234276901)

由于random()给出了 0 到 1 之间的实数值,我们应该将其乘以您的最大值以拉伸间隔,而不是舍入值以将它们转换为整数。


您还可以使用random.randint()

>>> random.randint(1,234276901)
于 2015-12-20T14:47:45.060 回答