浮点数的比较
  C0Tz0A5KKSwy 2天前 14 0

浮点数与"零值"

精度损失:

浮点值与实际值不等,可能偏大可能偏小,都属于精度损失

  1. 验证浮点数是否存在精度损失
    精度损失1

验证浮点数的差值是否存在精度损失

精度损失2

浮点数直接比较验证

精度损失3
结论: 浮点数在进行比较时,绝对不能使用双等号==来进行比较. 浮点数本身有精度损失,进而导致结果可能有细微的差别.

如何进行浮点数比较

1. x - y == 0的条件是 |x - y| < 精度.
即 x - y > -精度 && x - y < 精度

2.还可以使用fabs函数,C90,<math.h>, double fabs(double x); 返回x的绝对值.
即 fabs(x-y) < 精度
//--------------------------------------------------------------
//方法1,自定义精度
#include<stdio.h>
#include<math.h>

#define EPSILON 0.0000000000000001 //自定义精度
int main()
{
    double x = 1.0;
    double y = 0.1;

    //验证x - 0.9 是否等于 0.1
    if(fabs((x-0.9)- y) < EPSILON ) printf("aaaa\n");
    else printf("bbbb\n");

    puts("hello world!");
    return 0;
}
//方法2:使用C语言提供的精度
#include<stdio.h>
#include<math.h>
#include<float.h>

int main()
{
    double x = 1.0;
    double y = 0.1;

    //验证x - 0.9 是否等于 0.1
    //<float.h> 内置最小精度值 DBL_EPSILON 和 FLT_EPSILON ,1.0+DBL_EPSILON != 1.0 ,EPSILON是改变1.0的最小的值,数学概念,略
    if(fabs((x-0.9)- y) < DBL_EPSILON ) printf("aaaa\n");
    else printf("bbbb\n");
    
    return 0;
}

浮点比较方法1

浮点数与"零值"比较

只需要判定它是否小于EPSILON即可

int main()
{
    double x = 0.0;
    // double x  = 0.00000000000000000000000000001; //很小也可以认为等于0
    if(fabs(x) < DBL_EPSILON ) printf("等于0\n");
    else printf("不等于0\n");
    
    return 0;
}

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2天前 0

暂无评论

推荐阅读
  gtqiVYjgvftt   12天前   35   0   0 C语言
  FZifmKVgRC4p   2024年08月13日   33   0   0 C语言
  C0Tz0A5KKSwy   2天前   14   0   0 C语言
  IbmESGwVVrv0   2024年08月16日   156   0   0 C语言
  FZifmKVgRC4p   2024年08月16日   90   0   0 C语言
C0Tz0A5KKSwy