1 == 2表示大量的1

jra*_*rez 0 python python-2.7

我想知道导致这种行为的原因.我无法找到涵盖这一点的答案.它可能是简单而明显的东西,但它不适合我.我使用python 2.7.3Ubuntu.

In [1]: 2 == 1.9999999999999999
Out[1]: True

In [2]: 2 == 1.999999999999999
Out[2]: False
Run Code Online (Sandbox Code Playgroud)

编辑:

澄清我的问题.是否有一个书面的(在文档中)最大数量为9的,其中python将上面的表达式评估为等于2?

Ste*_*sop 7

  • Python使用浮点表示
  • 浮点实际上是一个固定宽度的二进制数(称为"有效数字")加上一个小整数来告诉你将该值移动多少两个幂("指数").加上一个标志位.就像科学记谱法一样,但在2号而不是10号.
  • 最接近的64位浮点值1.99999999999999992.0,因为64位浮点值(所谓的"双精度")使用52位有效数,相当于大约15位小数.因此字面意思1.9999999999999999只是另一种写作方式2.0.但是,最接近的值1.999999999999999小于2.0(我认为它是1.9999999999999988897769753748434595763683319091796875完全正确的,但是我太懒了,无法检查它是否正确,我只是依赖于Python的格式代码).
  • 我实际上并不知道Python语言是否需要专门使用64位浮点数,或者是CPython的实现细节.但无论使用什么大小,重要的不是小数位数,它是该大小的最接近的浮点值位于十进制文字的位置.某些文字比其他文字更接近.

因此,1.9999999999999999 == 2出于同样的原因2.0 == 2(Python允许包含比较的混合类型数值运算,并且整数2等于float 2.0).鉴于1.999999999999999 != 2.