DBL_EPSILON 含义和用法

DBL_EPSILON 是 C/C++ 标准库中定义的一个宏,表示 双精度浮点数(double 类型)的机器 epsilon(即 1.0 和比 1.0 大的最小可表示浮点数之间的差)。

词源解析

DBL_EPSILON 由以下部分构成:

  1. DBL

    • "double" 的缩写,指代 C/C++ 中的 double 类型(双精度浮点数)。
  2. EPSILON

    • 来自希腊字母 ε (epsilon),在数学和计算机科学中通常表示 极小的正数浮点数的精度误差
    • 在数值计算中,epsilon 通常指 机器 epsilon(machine epsilon),即:
      • 1.0 和比 1.0 大的最小可表示浮点数之间的差(对于 floatFLT_EPSILON,对于 doubleDBL_EPSILON)。

类似宏

C/C++ 标准库中类似的宏还有:

  • FLT_EPSILONfloat 类型的 epsilon)
  • LDBL_EPSILONlong double 类型的 epsilon)

数值示例

  • 在 IEEE 754 双精度浮点数(double)中,DBL_EPSILON 的值通常是 ~2.22044604925e-16
  • 这意味着,如果 x 是一个 double 类型的数,1.0 + DBL_EPSILON > 1.0,但 1.0 + (DBL_EPSILON / 2) == 1.0(因为无法精确表示)。

用途

DBL_EPSILON 常用于 浮点数比较,避免直接使用 == 判断浮点数是否相等(由于精度问题,浮点数通常用相对误差比较):

#include <cmath>
#include <cfloat>

bool almost_equal(double a, double b) {
    return std::abs(a - b) < DBL_EPSILON * std::max(std::abs(a), std::abs(b));
}

总结

DBL_EPSILON = Double Binary Loating-point EPSILON(双精度浮点数的机器 epsilon)。

posted @ 2025-07-11 15:27  立体风  阅读(95)  评论(0)    收藏  举报