浮点数的比较

   九层妖塔 起于垒土
在这里插入图片描述

浮点数的比较


  float 型的有效位数是 6 位,那么在用 float 型运算时就要注意了,来看下面这段程序:

#include <stdio.h>
int main(void)
{
  float a = 9.87654321;
  float b = 9.87654322;
  if(a > b)
  {
    printf("a > b\n");
  }
  else if(a == b)
  {
   printf("a == b\n");
  }
  else
  {
   printf("a < b\n");
  }
  return 0;
}

  按照我们平时的经验来说这段程序应该走a < b 的分支,但程序运行的结果却走了 a ==b 的分支,原因就是 float 型的精度问题,float 型无法区分出小数点后的第 8 位数,在内存中,a 和 b 的二进制数都是 0x411E0652,因此就走了a== b的分支。
  某些编译器在编译时会发现 a 和 b 的值超出了浮点数的精度,会产生一个告警,提示数据超过精度,但有些编译器则不会做任何提示。最可怕的是有一类编译器,调试窗口里显示的长度超出 float 型的精度,比如说 a 的值显示为 9.87654321,b 的值显示为 9.87654322,但在运行时,硬件可不管这套,硬件认为这 2 个数都是 0x411E0652,因此实际运行结果是 a ==b 的分支。

  • 1
    点赞
  • 2
    评论
  • 0
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

打赏
文章很值,打赏犒劳作者一下
©️2020 CSDN 皮肤主题: 技术黑板 设计师:CSDN官方博客 返回首页

打赏

#法外狂徒张三

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者