浮点数陷阱
如果我们计算下面这程序
sum = 0.7 + 0.1 + 0.1 + 0.1
print(sum == 1)
我们的主观直觉会输出 True 但是实际上输出的是 False。如果我们输出 sum 的话,我们会发现它的数值其实是 0.9999999999999999
这就是经典的“浮点数陷阱”,产生的主要原因是小数在计算机内部转换成二进制的时候可能位数过长,超过了指定精度,被计算机省略掉了。具体的介绍可以见这篇文章 只有1%的程序员搞懂过浮点数陷阱
解决方法
在判断两个浮点数a和b是否相等时,不要用a==b
,应该判断两者之差的绝对值abs(a-b)
是否小于某个阈值,例如1e-9。