2025-11-08 05:59:12
浮点数存储数据时只能保留有限位数,比如0.1和0.2在二进制里是无限循环小数,计算时会被四舍五入成近似值,加起来不等于0.3。温度计显示1.5℃加0.1℃可能变成1.℃,多出来的0.℃就是精度丢失的bug。
浮点数bug的根源在于二进制存储的局限性,根据IEEE 754标准,单精度浮点数用24位指数+23位尾数表示数值,能表示的精度约1/10亿。比如0.1的二进制是0.11...无限循环,存储时会被截断成0.11,计算0.1+0.2时变成0.。实际应用中,金融系统每笔交易误差超过0.000001就会导致拒付,而单精度浮点数最大误差约0.000000119,这就是为什么银行交易都用双精度浮点数。温度传感器每秒处理1000次数据,若每次误差0.0000001℃,一天累计误差就超过3℃,可能让智能电表误判用户用电量。
本题链接: