浮点数与"零值"的比较

cnblogs 2024-09-18 08:09:00 阅读 70

目录

  • 浮点数与"零值"
    • 精度损失:
    • 验证浮点数的差值是否存在精度损失
    • 浮点数直接比较验证
    • 如何进行浮点数比较
    • 浮点数与"零值"比较
      • null

浮点数与"零值"

精度损失:

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

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

    精度损失1

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

精度损失2

浮点数直接比较验证

精度损失3

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

如何进行浮点数比较

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即可

<code>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;

}


上一篇: 如何优雅地处理返回值

下一篇: SpringBoot源码分析

本文标签

C语言    C语法剖析   


声明

本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。