2025-11-20 05:30:00
浮点数为啥不能直接比是否相等呢?啊,因为它用二进制存储的时候,像0.1这种十进制数得拆成无限循环小数。计算机只能存有限位数,得四舍五入。比如单精度浮点数有24位指数,23位尾数,存0.1的时候得截断,变成0.000000555...这样。再比如0.1加0.2,实际算出来是0.000004,跟0.3差个0.000004。所以直接比较就会出问题啊。
这是因为二进制存储精度有限,像单精度浮点数只能存到小数点后15位。比如0.1的二进制表示是0.011...无限循环,计算机存的时候得截断到23位尾数,变成0.0。这样每次运算都会累积误差,比如0.1+0.2实际算出来是0.000004。再比如比较0.1+0.2和0.3的时候,左边是0.000004,右边是0.00003,虽然看起来接近,但二进制存储下它们实际值不同。所以必须用浮点数专用比较方法,比如判断差值是否小于预设容差。
本题链接: