bigdecimal js 判断等于0_你知道C语言中如何判断浮点数是否等于0吗

笔试时曾被问到:如何判断浮点数为0,当时天真无邪,以为用if直接比较,如下所示:
float a = 2.4;double b = 3.56;if(0 == a){  printf("a为0 \r\n");}if(0 == b){  printf("b为0 \r\n");}
其实不是这样的,回来百度后才知道,float、double分别遵循R32-24,R64-53的标准。他们尾数的位数分别是23、52,即误差在2^-23,2^-52.所以 float 的精度误差在 1e-6 , double 的精度误差在 1e-15 。

所以,判断两个浮点数是否为0:

  • 要判断一个单精度浮点数是否等于0:if(fabs(f_float) <= 1e-6);

  • 要判断一个双精度浮点数是否等于0:if(fabs(d_double) <= 1e-15);

判断两个浮点数是否相等:

  • 要判断两个单精度浮点数是否相等:if(fabs(f1_float - f2_float) <= 1e-6);

  • 要判断两个双精度浮点数是否相等:if(fabs(d1_double - d2_double) <= 1e-15);

贴上程序:

/** * C语言中判断浮点数是否等于0 * abs() : 返回整型数据的绝对值 * fabs() : 返回浮点型数据的绝对值 */#include #include  //因为使用了fabs函数#define FLOAT_EPS 1e-6 //单精度的误差#define DOUBLE_EPS 1e-15 //双精度的误差int main(void){  float f1 = 0.000001;  float f2 = 0.001;  double d1 = 0.00001;  double d2 = 0.00001;   //判断浮点数是否等于0  //1、单精度浮点数  if(fabs(f1) <= FLOAT_EPS) //求浮点数的绝对值再与最小值比较  {    printf("%f为0\n", f1);  }  else  {    printf("%f不为0\n", f1);  }  //2、双精度浮点数  if(fabs(d1) <= DOUBLE_EPS)  {    printf("%lf为0\n", d1);  }  else  {    printf("%lf不为0\n", d1);  }  //判断两个浮点数是否相等  //1、单精度浮点数  if (fabs(f1 - f2) <= FLOAT_EPS)  {    printf("%f 和 %f 相等\n", f1, f2);  }  else  {    printf("%f 和 %f 不相等\n", f1, f2);  }  //2、双精度浮点数  if(fabs(d1 - d2) <= DOUBLE_EPS)  {    printf("%lf 和 %lf 相等\n", d1, d2);  }  else  {    printf("%lf 和 %lf 不相等\n", d1, d2);  }  return 0;}
引用头文件,是因为使用了fabs(),求浮点数绝对值, 而abs(), 用于求整型的绝对值。

希望下次你面试的时候不再上当。

END

更多内容请关注公众号:嵌入式的路上

3c5f2bd80f71562d0579ba9044e3c792.png

改编自:https://blog.csdn.net/xiaotian2516/article/details/93210636


版权归原作者所有,如有侵权,请联系删除。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值