FLT_EPSILON-----浮点数的比较

本文介绍了FLT_EPSILON、__FLT_EPSILON__、DBL_EPSILON、__DBL_EPSILON__和LDBL_EPSILON、__LDBL_EPSILON__在编程中的作用,尤其是在比较浮点数值的精确度时。通过实例演示了正确使用这些常量避免比较误差的方法。

FLT_EPSILON__FLT_EPSILON__是一个意思,表示的是float类型(单精度浮点数)所能识别的最小精度。DBL_EPSILON__DBL_EPSILON__表示的是double类型所能识别的最小精度,LDBL_EPSILON__LDBL_EPSILON__表示的是long double类型所能识别的最小精度;它们常用于比较当中:

一、使用场景

double a = 0.5;
if (a == 0.5) {
    NSLog(@"a = 0.5是正确的。");
} else {
    NSLog(@"a = 0.5不是正确的。");
}
NSLog(@"a的值为: %f", a);

double b = sin(M_PI / 6.0);
if (b == 0.5) {
    NSLog(@"b = 0.5是正确的。");
} else {
    NSLog(@"b = 0.5不是正确的。");
}
NSLog(@"b的值为:%f", b);

第一个比较正确,因为0.5double类型的存储精度范围内;
第二个比较可能正确也可能错误,结果取决于处理器、编译器的版本和设置;

二、正确用法

上面比较b的正确方法应该是这样:

double b = sin(M_PI / 6.0);
if (fabs(b - 0.5) < DBL_EPSILON) {
    NSLog(@"b = 0.5是正确的。");
} else {
    NSLog(@"b = 0.5不是正确的。");
}
NSLog(@"b的值为:%f", b);

转自https://www.jianshu.com/p/6f57ec7ee660

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值