我可能会错过一些基本的东西,但考虑到这个解释器会话:为什么-0.0和0.0不一样?
>>> -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
>>>
现在,我意识到,浮点数是一个巨大的与计算机上的问题来源,但这些问题总是针对其准确性。例如:
>>> 1.3 + 0.1
1.4000000000000001
>>>
但是,这不是一个准确性问题,是吗?我的意思是,我们正在谈论这里的数字的符号,而不是小数点。
我可以重现这一行为在这两个的Python 2.7和Python 3.4,所以这不是一个特定版本的问题。
我相信这是IEEE 754浮点表示的一个特性,这意味着它不是特定于Python。 – 2014-11-05 19:04:41
整数溢出可能是更严重的“计算机问题的根源”。 – tmyklebu 2014-11-05 22:35:44
为什么你使用'is'进行数字比较?您的许多问题与签名的零无关:尝试'x = 2.3','y = 2.3',接着'x是y'。然后,为了好玩,试试'x = 2.3; y = 2.3'(全部在一行上),后面是'x是y'。 – 2014-11-06 12:21:28