print(0.4+0.2==0.6)
print(0.1+0.2==0.3)
print(0.1+0.7==0.8)
print(0.4+0.8==1.2)
以上输出均为False
这是为什么还有哪些是特殊的
print(0.4+0.2==0.6)
print(0.1+0.2==0.3)
print(0.1+0.7==0.8)
print(0.4+0.8==1.2)
以上输出均为False
这是为什么还有哪些是特殊的
因为在计算机中,小数是以二进制保存的,导致其精度会有缺失。
Python 中使用双精度浮点数来存储小数。在 Python 使用的 IEEE 754 标准(52M/11E/1S)中,8字节64位存储空间分配了52位来存储浮点数的有效数字,11位存储指数,1位存储正负号,即这是一种二进制版的科学计数法格式。虽然52位有效数字看起来很多,但麻烦之处在于,二进制小数在表示有理数时极易遇到无限循环的问题。其中很多在十进制小数中是有限的,比如十进制的 1/10,在十进制中可以简单写为 0.1 ,但在二进制中,他得写成:0.0001100110011001100110011001100110011001100110011001…..(后面全是 1001 循环)。因为浮点数只有52位有效数字,从第53位开始,就舍入了。这样就造成了标题里提到的”浮点数精度损失“问题。 舍入(round)的规则为“0 舍 1 入”,所以有时候会稍大一点有时候会稍小一点。