符号常量 FLT_EPSILON

一、含义

        FLT_EPSILON 是 C 语言标准库 <float.h> 中定义的一个常量,表示 在 float 类型中,数值 1.0 和比 1.0 大的最小可表示浮点数之间的差值。这个值反映了 float 类型的 机器精度(Machine Epsilon),即浮点数在该量级下的最小相对误差。

二、定义

  • 数学定义
    FLT_EPSILON=1.0^{+}-1.0,其中 1.0^{+}是比 1.0 大的最小可表示 float 值。

  • 实际值
    在标准实现中,FLT_EPSILON 的值约为 1.1920928955×10^{-7}。(即 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) :返回较大的那个浮点值

相对误差 = \frac{|a-b|}{max(|a|,|b|)} :相对误差小于等于 FLT_EPSILON 时视为相等

2. 精度相关计算

数值稳定性:
在设计数值算法时,需确保误差不超过 FLT_EPSILON 的量级。

运算误差分析:
若算法涉及多次浮点运算,误差可能累积。FLT_EPSILON 可用于估计最大误差。

        

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值