Python 有人能解释一下吗:0.2+;0.1 = 0.30000000000000004?

Python 有人能解释一下吗:0.2+;0.1 = 0.30000000000000004?,python,python-3.x,math,Python,Python 3.x,Math,副本: 为什么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 >>> 为什么0.2+0.1=0.3?那是因为.1不能用二

副本:

为什么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
>>> 

为什么
0.2+0.1=0.3

那是因为
.1
不能用二进制浮点表示法精确表示。如果你尝试

>>> .1
Python将以
.1
响应,因为它只打印到一定的精度,但已经存在一个小的舍入错误。同样的情况也发生在
.3
上,但是当您发出

>>> .2 + .1
0.30000000000000004
然后,
.2
.1
中的舍入错误累积。另请注意:

>>> .2 + .1 == .3
False

并非所有的浮点数都能在有限机器上精确表示。0.1和0.2都不能用二进制浮点精确表示。也不是0.3

如果一个数字的形式是A/b,其中A和b是整数,b是2的幂,那么它就是可精确表示的。显然,数据类型需要有足够大的有效位来存储数字


我推荐这是一个探索代表性的好工具。

@MarkByers:好的观点,扩展了我的答案。0.2;-)三者都不能表示为(-1)^符号*1.分数*2^(exp-127)。请参阅重复来源的已接受答案中的引用,以便计算机无法添加
.1
.3
?那看起来很没用