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

标签 python python-3.x floating-point precision comparison-operators

在 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 float > 以便进行比较)。

对于小于前述的数字,结果(可以表示)并且不言而喻:

>>> 5.000000000000001
5.000000000000001

是的,不幸的是,正如我在对该问题的最初评论中所想的那样,float_richcompare 与此行为无关。这一切都发生在它被调用之前。

关于python - 为什么 5 != 5.0000000000000000001 为假,而 5 != 5.00000001 为真?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41271491/

相关文章:

python - 跳过 Django Allauth "You are about to sign in using a third party account from Google"页面

python-3.x - 执行时出错 `jupyter notebook`(没有这样的文件或目录)

python-3.x - 使用PIL保存模式错误将png转换为pdf

floating-point - 是否有任何二进制值没有精确的十进制表示?

php获取小数点后的值

python - scipy 稀疏矩阵上的 sklearn train_test_split 给出了错误的结果

python - pyPEG - 由 `flag()` 函数识别的数据被 `compose()` 函数错误地返回

python - 选择 python popen process.kill() 或 process.terminate() 的更优雅的方法

python-3.x - 使用自然语言处理从段落中提取特定类型的单词

c++ - 在 C++ 中创建非规范化(次规范化)浮点值