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

PyTorch精度问题导致求和忽略小浮点数,求解决方法

解决PyTorch求和忽略小浮点数的问题

这个问题本质是单精度浮点数(float32)的精度限制导致的。PyTorch默认创建的张量是float32类型,它的有效数字只有6-7位左右。你的前三个数求和是40,加上1e-6之后,这个小数值在float32的精度范围内会被舍入,导致总和和前三个数的和无法区分。

解决方法:

  • 改用更高精度的张量类型
    创建张量时指定dtype=torch.float64(双精度),它的有效数字能达到15-16位,足够保留1e-6这样的小数值:

    test_tensor = torch.tensor([10, 20, 10, 1e-6], dtype=torch.float64)
    print(torch.sum(test_tensor) == torch.sum(test_tensor[0:-1]))  # 输出tensor(False)
    print(torch.sum(test_tensor) - torch.sum(test_tensor[0:-1]))  # 输出tensor(1.0000e-06, dtype=torch.float64)
    
  • 避免直接用==比较浮点数(更通用的做法)
    即使使用更高精度,浮点数运算也可能存在微小误差,直接用相等判断并不稳妥。如果需要判断差值严格大于0,可以计算两者的差值后和一个极小的阈值比较:

    test_tensor = torch.tensor([10, 20, 10, 1e-6])
    sum_full = torch.sum(test_tensor)
    sum_part = torch.sum(test_tensor[0:-1])
    # 判断差值是否大于一个极小值(比如1e-10)
    print((sum_full - sum_part) > 1e-10)  # 输出tensor(True)
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 14:35:21