DBL_EPSILON 含义和用法
DBL_EPSILON 是 C/C++ 标准库中定义的一个宏,表示 双精度浮点数(double 类型)的机器 epsilon(即 1.0 和比 1.0 大的最小可表示浮点数之间的差)。
词源解析
DBL_EPSILON 由以下部分构成:
-
DBL- 是 "double" 的缩写,指代 C/C++ 中的
double类型(双精度浮点数)。
- 是 "double" 的缩写,指代 C/C++ 中的
-
EPSILON- 来自希腊字母 ε (epsilon),在数学和计算机科学中通常表示 极小的正数 或 浮点数的精度误差。
- 在数值计算中,epsilon 通常指 机器 epsilon(machine epsilon),即:
- 1.0 和比 1.0 大的最小可表示浮点数之间的差(对于
float是FLT_EPSILON,对于double是DBL_EPSILON)。
- 1.0 和比 1.0 大的最小可表示浮点数之间的差(对于
类似宏
C/C++ 标准库中类似的宏还有:
FLT_EPSILON(float类型的 epsilon)LDBL_EPSILON(long 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)。

浙公网安备 33010602011771号