做物理模拟,粒子位置死活对不上。debug三小时,最后发现是0.1+0.2!=0.3。
IEEE 754这破标准,银行家舍入、阶码、尾数,大学时睡过去的课全还回来了。嘿嘿最绝的是,同样的代码在x86和ARM上结果还不一样,一个向偶舍入一个直接截断,跨平台调试简直是噩梦。
现在学乖了,金融计算全换decimal,物理引擎统一用定点数,宁可牺牲点性能也不想再被浮点误差背刺。那些觉得"浮点误差能有多大"的兄弟,建议试试累加十万个0.0001,看看最后离1.0有多远。
你们被float坑过吗?还是说早就习惯了和近似值共存。