Python 中的浮点相等检查是否会根据机器 epsilon 容差进行检查?

问题描述 投票:0回答:1

我对 python 中浮点数的精度和相等性检查有点困惑。

例如,

15 + 1e-16 == 15

计算出正确的 b/c 1e-16 是 < machine epsilon for fp64.

15 + 1e-15 == 15

评估为 false,因为 1e-15 > fp64 的机器 epsilon。

但是当我这样做

sys.getsizeof(15 + 1e-16)
时,我得到 24 个字节,即 fp192,如果它是 true,则意味着
15 + 1e-16 == 15
将评估为 false,因为 fp192 的机器 epsilon 肯定是 << 1e-16.

我一直认为

==
正在检查 LHS 是否在相应类型的机器 epsilon 的
+/-
范围内。

为了增加我的困惑,我检查了:

1e-323 == 0 # evaluates false
1e-324 == 0 # evaluates true
sys.getsizeof(1e-323) # gives 24 bytes

我不明白这方面的界限。

python floating-point precision
1个回答
0
投票

Python 中所有数字类型(包括浮点数)的比较都是精确的。硬件精度与此无关。

getsizeof()
返回 Python object 的大小,其中包括指向对象类型对象的指针的字节数以及引用计数等内容。在当前几乎所有的机器上,一个 float 的实际数据占用 8 个字节,只是其中的一小部分。

© www.soinside.com 2019 - 2024. All rights reserved.