Mus*_*aab 20 python math python-3.x
可能重复:
浮点数是如何存储的?什么时候重要?
为什么Python解释器中会出现以下情况?
>>> 0.1+0.1+0.1-0.3
5.551115123125783e-17
>>> 0.1+0.1
0.2
>>> 0.2+0.1
0.30000000000000004
>>> 0.3-0.3
0.0
>>> 0.2+0.1
0.30000000000000004
>>>
Run Code Online (Sandbox Code Playgroud)
为什么不0.2 + 0.1 = 0.3呢?
Fre*_*Foo 14
那是因为.1无法在二进制浮点表示中精确表示.如果你试试
>>> .1
Run Code Online (Sandbox Code Playgroud)
Python会响应,.1因为它只打印到一定的精度,但已经有一个小的舍入错误.发生同样的事情.3,但是当你发布时
>>> .2 + .1
0.30000000000000004
Run Code Online (Sandbox Code Playgroud)
那么舍入误差.2和.1积累.另请注意:
>>> .2 + .1 == .3
False
Run Code Online (Sandbox Code Playgroud)
Dav*_*nan 11
并非所有浮点数都可以在有限的机器上完全表示.在二进制浮点中,0.1和0.2都不能精确表示.而且也不是0.3.
如果数字是a/b形式,其中a和b是整数,b是2的幂,则数字是完全可表示的.显然,数据类型需要具有足够大的有效数来存储数字.
我推荐Rob Kennedy的有用网页作为探索可表示性的好工具.