浮点数乘法的舍入机制解析及定点数适配疑问
浮点数乘法的舍入与定点数处理问题
浮点数乘法的舍入机制
浮点数运算(遵循IEEE 754标准)的每一步都会执行舍入操作,将结果调整为当前浮点数格式能精确表示的最接近值。
你提到的0.7f是单精度浮点数,它的实际存储值是0.699999988079071044921875。当它乘以100f时,计算出的中间值非常接近70——而70属于单精度浮点数能精确表示的整数范围(2^24以内的整数都可被单精度精确存储),因此舍入后就得到了精确的70。
定点数的舍入处理
定点数本身没有内置的自动舍入机制,多数定点数库在运算后会直接截断超出位宽的低位部分,这就是你看到FP(100) * FP(0.7)得到69.99999、强制转int时被截为69的原因。
不过定点数完全可以手动实现舍入逻辑:比如在运算结果转整数前,先执行四舍五入(或向最近整数舍入)操作,就能得到精确的70。不同定点数库的舍入支持不同,有些提供内置舍入函数,有些需要你根据定点数的小数位偏移量自行计算(比如给结果加上0.5后再截断)。
内容的提问来源于stack exchange,提问作者yahoic
相关产品推荐
相关产品推荐

