You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

不使用decimal等库如何修复Python浮点数计算的舍入误差?

解决方案

核心思路是整数缩放累加:把所有浮点输入先放大指定倍数转换为整数进行累加,整数运算不存在精度丢失问题,最终输出时再缩小对应倍数即可,完全不需要引入第三方库。

你之前只对单次输入做round后直接用浮点数累加,误差还是会随着累加次数逐步放大,换成整数累加就可以完全避免这个问题。

修改后的Simulator类代码

class Simulator: # we use a class just to hold variables between calls
    def __init__(self, scale=1000): # scale按需要保留的小数位设置,3位小数就设为1000
        # 用整数存储累加结果,无精度丢失
        self.scaled_a_sum = 0
        self.scaled_b_sum = 0
        self.scale = scale
        
    def update(self, a, b):
        # 输入放大scale倍转整数后再累加
        self.scaled_a_sum += round(a * self.scale)
        self.scaled_b_sum += round(b * self.scale)
       
    def results(self):
        # 最终输出时缩小对应倍数转回浮点
        a_sum = self.scaled_a_sum / self.scale
        d_sum = (self.scaled_a_sum - self.scaled_b_sum) / self.scale
        return a_sum, d_sum

方案说明

  • scale参数可灵活调整:需要保留1位小数设为10,4位小数设为10000即可,适配不同精度需求。
  • 整数累加的计算效率和原生浮点数累加几乎无差异,不会额外增加性能开销。
  • 你提到的d_sum 1e-8量级的误差是浮点数二进制表示的固有特性,如果要在输出时消除,直接在打印时保留对应小数位即可,比如使用print(f"Error in a_sum is {a_error:.3f} and {d_error:.3f} in d_sum")格式化输出。

内容的提问来源于stack exchange,提问作者stafino

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 19:54:04