我正在尝试确定Python浮点数与零比较时的精确度。请看以下内容:
1e-323 == 0
> False
1e-324 == 0
> True
看起来阈值是324个十进制点,至少在我使用的实现(Python 2.7,CPython)中是这样。 这是否有记录? 这是否取决于实现?
我正在尝试确定Python浮点数与零比较时的精确度。请看以下内容:
1e-323 == 0
> False
1e-324 == 0
> True
看起来阈值是324个十进制点,至少在我使用的实现(Python 2.7,CPython)中是这样。 这是否有记录? 这是否取决于实现?
这是实现特定的:
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)
sys.float_info
的文档。它公开了有关特定实现的各种信息。但是,在几乎所有平台上,它公开相同的信息,因为现在几乎所有平台都支持 IEEE 754 双精度浮点数。 - Tim Peters
1e100 == 1e100 + 1
。这意味着特别大的浮点数在小数点后甚至没有一位精度。 - Kevin