rtolatol 是数值计算中用于判断两个数是否“足够接近”的核心参数,分别代表相对容差(Relative Tolerance)和绝对容差(Absolute Tolerance)。

核心概念解释

在编程(尤其是科学计算,如 NumPy、SciPy、Pandas)中,直接用 == 判断浮点数是否相等是不可靠的(因为浮点数有精度误差),因此会用 rtolatol 组合来定义“相等”的标准,判断逻辑如下:

两个数 ab 被认为相等,当且仅当满足:
$$|a - b| \le \text{atol} + \text{rtol} \times |b|$$

1. atol(绝对容差)

2. rtol(相对容差)

代码示例(Python NumPy)

下面用 NumPy 的 np.allclose() 函数演示 rtolatol 的实际使用:

import numpy as np

# 示例1:接近0的数值(依赖atol)
a = 0.0
b = 1e-9
# 默认:rtol=1e-05, atol=1e-08
print(np.allclose(a, b))  # 输出 True(1e-9 ≤ 1e-8 + 1e-5*0 → 满足)

# 示例2:远离0的数值(依赖rtol)
c = 1000.0
d = 1000.001
print(np.allclose(c, d))  # 输出 True(0.001 ≤ 1e-8 + 1e-5*1000 → 0.001 ≤ 0.01)

# 示例3:调整容差,改变判断结果
print(np.allclose(c, d, rtol=1e-7))  # 输出 False(0.001 > 1e-8 + 1e-7*1000 → 0.001 > 0.0001)

总结

  1. rtol(相对容差):按数值大小的比例判断误差,适用于非零大数的比较。
  2. atol(绝对容差):固定误差阈值,适用于接近 0 的小数比较。
  3. 实际使用中,两者结合能覆盖所有浮点数比较场景,避免直接用 == 导致的精度问题。