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

Numpy allclose的float32与float16标准容差咨询

针对float32和float16的np.allclose标准容差建议

核心逻辑:基于浮点数精度与np.allclose的判断公式

np.allclose的判断规则是:

|a - b| <= atol + rtol * |b|

其中rtol(相对容差)对应浮点数的相对误差范围,和该精度的机器epsilon(ε,即最小的可表示的大于1的浮点数与1的差)强相关;atol(绝对容差)对应接近0时的绝对误差范围,通常取该精度下最小可表示的非零值的合理倍数。

各精度对应的推荐容差

1. float32(单精度)

  • 机器epsilon ε ≈ 1.19e-7(对应7-8位十进制有效数字)
  • 推荐rtol:1e-6 到 1e-7(覆盖常见计算的累积误差,对应8-10倍ε);若需更宽松容错,也可使用1e-5(需注意会放过更大相对误差)
  • 推荐atol:1e-4 到 1e-5(适配float32最小正数值的合理放大,避免接近0时误判)
  • 示例调用:
    np.allclose(a, b, rtol=1e-6, atol=1e-4)
    

2. float16(半精度)

  • 机器epsilon ε ≈ 0.000977(对应3-4位十进制有效数字)
  • 推荐rtol:1e-3 到 1e-4(匹配半精度的有效位数,对应1-10倍ε)
  • 推荐atol:1e-2 到 1e-3(适配float16最小正数值的范围)
  • 示例调用:
    np.allclose(a, b, rtol=1e-3, atol=1e-2)
    

推导依据

浮点数的有效十进制位数决定了相对误差的合理上限:

  • float32的7-8位有效数字意味着,两个“相等”的计算结果相对误差不应超过1e-7(对应最后一位有效数字的波动),放宽到1e-6是为了覆盖多步计算的累积误差
  • float16的3-4位有效数字对应的相对误差上限约为1e-3,这是半精度计算中能保证的最小误差范围
  • atol的取值是为了处理数值接近0的场景:当|b|极小时,rtol项趋近于0,此时需要atol提供合理的绝对误差阈值,避免因浮点数最小表示限制导致误判

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 16:33:23