2025-11-20 05:31:21
double运算不精确是因为存储空间有限小数位不够多导致误差比如0.1这样的数无法完全表示转整数时就会直接舍去小数部分结果不准确。比如计算0.1+0.2等于0.000004转整数就是300而不是300.000004。这是因为双精度浮点数只能保留15到17位小数位后面的数字会被四舍五入处理。
根据IEEE 754标准双精度浮点数用64位存储其中52位给小数部分。比如0.1的二进制表示是无限循环的0.11...当计算0.1+0.2时实际得到0.000004转整数就是300而不是300.000004。这是因为存储时0.1的二进制形式会被截断为0.10011...这样加法运算后小数部分无法完全保留。比如用1.0/3.0转整数就是0因为实际存储的是0.33333而舍去小数部分就会变成0.0再转整数就是0。这种误差在科学计算和金融领域非常危险比如计算0.1的100次方实际得到1.00002转整数就是1而不是1.00002。
本题链接: