为什么 5 != 5.0000000000000000001 为假,而 5 != 5.00000001 为真?

Why is 5 != 5.0000000000000000001 False, but 5 != 5.00000001 True?

在 python 3.5 中,我只是在玩比较运算符,发现了这个(看似)奇怪的东西。

是否存在小数点后零个数的阈值,超过该阈值解释器会因为浮点值固有的不准确性而决定不考虑相关值?

简而言之,在完成输入解析的阶段,Python 需要将您的输入转换为 C double,然后再转换为 Python float.具有更多 than 16 decimal digits 的输入将被近似,5.0000000000000001 被近似为 5.0:

>>> 5.0000000000000001 
5.0

因此,比较 5 == 5.0000000000000001 将成功(5 将转换为等于 5.0 的 Python 浮点数以便进行比较发生)。

小于上述数字,结果(可以表示)不言而喻:

>>> 5.000000000000001
5.000000000000001

是的,float_richcompare 与我在对该问题的原始评论中所认为的这种行为无关——不幸的是——。这一切都发生在它被调用之前。