美文网首页锻炼吃饭的家伙
宏DBL_EPSILON(__DBL_EPSILON__)和FL

宏DBL_EPSILON(__DBL_EPSILON__)和FL

作者: GLGeek | 来源:发表于2018-04-24 17:44 被阅读98次

一、定义

iOS工程中,打开float.h头文件,找到下面的定义

宏定义
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);

同样的,FLT_EPSILONLDBL_EPSILON也是这样使用。

三、总结

1.EPSILON是最小误差,是EPSILON+X不等于X的最小的正数;
2.在比较浮点数的时候,一定要注意精度的问题;

相关文章

  • 宏DBL_EPSILON(__DBL_EPSILON__)和FL

    一、定义 在iOS工程中,打开float.h头文件,找到下面的定义 第一个比较正确,因为0.5在double类型的...

  • 那些永远记不住的单词|Afflict 折磨痛苦【231】

    Afflict 英 [ə'flɪkt] 美 [ə'flɪkt] vt. 折磨;使痛苦;使苦恼 给他人制造痛苦和烦...

  • Flowjo处理细胞周期

    1. 相关知识: 通道命名方式:以FL(fluorescence)加数字命名,如FL1、FL2、FL3等。以该通道...

  • FL?

    我喜欢的人叫做mike。 今年初三毕业了,而我和他的故事也是在这美好的一年中才开始发生的。他总是能读懂我的心,我却...

  • FL

    今天以个人身份接受Nerocomputing的邀请,成为Nerocomputing的审稿人。(补充:刚刚得知此期刊...

  • 笃学奖-Topic9-B19304陌上花-Uband精读

    Lux in flux flux/flʌks; flʌks/n[U] continuous change or s...

  • 宏定义和宏方法

    宏定义和宏方法 定义机型 定义手机系统型号 宏定义屏幕宽度和高度 定义打印的东西 通过RGB获得一个颜色 验证手机...

  • 10/19

    今天老师讲了预处理命令,宏定义分为无参宏定义,带参宏定义和条件编译。宏定义包括宏名和宏展开,和函数相比预处理有很多...

  • 音乐编曲软件FL Studio的剪辑菜单使用方法

    使用FL Studio我们往往都会应用到FL Studio的剪辑知识,这时一般多多少少都会涉及到剪辑菜单。 FL ...

  • 词为我用 - flinch

    词汇释义 flinch TEM8 GRE UK /flɪntʃ/ US/flɪntʃ/ 1. verb, If ...

网友评论

    本文标题:宏DBL_EPSILON(__DBL_EPSILON__)和FL

    本文链接:https://www.haomeiwen.com/subject/cwxdbxtx.html