ToB企服应用市场:ToB评测及商务社交产业平台

标题: 浮点数与"零值"的比较 [打印本页]

作者: 愛在花開的季節    时间: 2024-9-17 19:41
标题: 浮点数与"零值"的比较
目录

浮点数与"零值"

精度损失:

浮点值与实际值不等,可能偏大可能偏小,都属于精度损失
验证浮点数的差值是否存在精度损失


浮点数直接比较验证


结论: 浮点数在举行比较时,绝对不能使用双等号==来举行比较.  浮点数本身有精度损失,进而导致结果可能有渺小的差异.
如何举行浮点数比较
  1. 1. x - y == 0的条件是 |x - y| < 精度.
  2. 即 x - y > -精度 && x - y < 精度
  3. 2.还可以使用fabs函数,C90,<math.h>, double fabs(double x); 返回x的绝对值.
  4. 即 fabs(x-y) < 精度
复制代码
  1. //--------------------------------------------------------------
  2. //方法1,自定义精度
  3. #include<stdio.h>
  4. #include<math.h>
  5. #define EPSILON 0.0000000000000001 //自定义精度
  6. int main()
  7. {
  8.     double x = 1.0;
  9.     double y = 0.1;
  10.     //验证x - 0.9 是否等于 0.1
  11.     if(fabs((x-0.9)- y) < EPSILON ) printf("aaaa\n");
  12.     else printf("bbbb\n");
  13.     puts("hello world!");
  14.     return 0;
  15. }
复制代码
  1. //方法2:使用C语言提供的精度
  2. #include<stdio.h>
  3. #include<math.h>
  4. #include<float.h>
  5. int main()
  6. {
  7.     double x = 1.0;
  8.     double y = 0.1;
  9.     //验证x - 0.9 是否等于 0.1
  10.     //<float.h> 内置最小精度值 DBL_EPSILON 和 FLT_EPSILON ,1.0+DBL_EPSILON != 1.0 ,EPSILON是改变1.0的最小的值,数学概念,略
  11.     if(fabs((x-0.9)- y) < DBL_EPSILON ) printf("aaaa\n");
  12.     else printf("bbbb\n");
  13.    
  14.     return 0;
  15. }
复制代码

浮点数与"零值"比较

只需要判断它是否小于EPSILON即可
  1. int main()
  2. {
  3.     double x = 0.0;
  4.     // double x  = 0.00000000000000000000000000001; //很小也可以认为等于0
  5.     if(fabs(x) < DBL_EPSILON ) printf("等于0\n");
  6.     else printf("不等于0\n");
  7.    
  8.     return 0;
  9. }
复制代码



免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4