Python浮点数的精度(小数点后)是多少?

4

我正在尝试确定Python浮点数与零比较时的精确度。请看以下内容:

1e-323 == 0
> False
1e-324 == 0
> True

看起来阈值是324个十进制点,至少在我使用的实现(Python 2.7,CPython)中是这样。 这是否有记录? 这是否取决于实现?


我认为你不能总是信任那个阈值,即使限制在你自己的环境中。例如,考虑到 1e100 == 1e100 + 1。这意味着特别大的浮点数在小数点后甚至没有一位精度。 - Kevin
1
math.isclose()可能也会有所帮助:https://dev59.com/tG035IYBdhLWcg3wJcjT#33024979 - Chad Kennedy
1个回答

9

这是实现特定的:

numbers.Real (float)

这些表示机器级双精度浮点数。您受制于底层机器架构(以及C或Java实现)对接受范围和溢出处理的处理方式。Python不支持单精度浮点数;通常使用它们的处理器和内存使用的节省,被在Python中使用对象的开销所抵消,因此没有理由用两种浮点数来复杂化语言。

但是,您可以在运行时查询此信息:

>>> sys.float_info
sys.float_info(max=1.7976931348623157e+308, max_exp=1024, max_10_exp=308, min=2.2250738585072014e-308, min_exp=-1021, min_10_exp=-307, dig=15, mant_dig=53, epsilon=2.220446049250313e-16, radix=2, rounds=1)

1
查看 sys.float_info 的文档。它公开了有关特定实现的各种信息。但是,在几乎所有平台上,它公开相同的信息,因为现在几乎所有平台都支持 IEEE 754 双精度浮点数。 - Tim Peters

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接