一、含义
FLT_EPSILON 是 C 语言标准库 <float.h> 中定义的一个常量,表示 在 float 类型中,数值 1.0 和比 1.0 大的最小可表示浮点数之间的差值。这个值反映了 float 类型的 机器精度(Machine Epsilon),即浮点数在该量级下的最小相对误差。
二、定义
-
数学定义:
FLT_EPSILON=,其中
是比 1.0 大的最小可表示 float 值。
-
实际值:
在标准实现中,FLT_EPSILON 的值约为 1.1920928955×。(即 1.19209e-07)。
三、实际意义
1.数值比较
在比较浮点数时,直接使用 == 可能因精度误差导致错误。通常用 FLT_EPSILON 作为误差容忍度:
#include <math.h>
#include <float.h>
bool is_equal(float a, float b) {
// 相对误差小于等于 FLT_EPSILON 时视为相等,相等返回1,不等返回0
return fabs(a - b) <= FLT_EPSILON * fmax(fabs(a), fabs(b));
}
fabs(double x):返回浮点值的绝对值
fmax(double x, double y) :返回较大的那个浮点值
相对误差 = :相对误差小于等于 FLT_EPSILON 时视为相等
2. 精度相关计算
数值稳定性:
在设计数值算法时,需确保误差不超过 FLT_EPSILON 的量级。
运算误差分析:
若算法涉及多次浮点运算,误差可能累积。FLT_EPSILON 可用于估计最大误差。