我可能遗漏了一些基本的东西,但考虑一下这个解释器 session 1:
>>> -0.0 is 0.0
False
>>> 0.0 is 0.0
True
>>> -0.0 # The sign is even retained in the output. Why?
-0.0
>>>
您可能认为 Python 解释器会意识到 -0.0
和 0.0
是相同的数字。事实上,它将它们比较为相等:
>>> -0.0 == 0.0
True
>>>
那么为什么 Python 区分两者并为 -0.0
生成一个全新的对象?它不会对整数执行此操作:
>>> -0 is 0
True
>>> -0 # Sign is not retained
0
>>>
现在,我意识到 float 是计算机问题的一个重要来源,但这些问题总是与它们的准确性有关。例如:
>>> 1.3 + 0.1
1.4000000000000001
>>>
但这不是准确性问题,是吗?我的意思是,我们在这里讨论的是数字的符号,而不是它的小数位。
1我可以在 Python 2.7 和 Python 3.4 中重现此行为,因此这不是特定于版本的问题。
最佳答案
在IEEE754中, float 的格式,符号是一个单独的位。所以 -0.0 和 0.0 有一点不同。
整数使用二进制补码来表示负数;这就是为什么只有一个 0
。
使用 is
只有你真正想要比较对象的实例。否则,特别是对于数字,使用 ==
:
>>> 1999+1 is 2000
False
>>> 0.0 == -0.0
True
关于python - 为什么 -0.0 与 0.0 不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26764972/