设为首页 加入收藏

TOP

float x 与“零值”比较的if语句(三)
2014-04-06 17:41:29 来源: 作者: 【 】 浏览:290
Tags:float  零值 比较 语句

 

  也可以想一下,0.9无限循环不是等于1吗

  如果正好某个值等于0.9循环,浮点数只能给出一个“确定”的值,那就会“做错题”。

  我想原理大约是这样的。具体的嘛,我还没有弄清楚 :)

  再经过搜索后,写下如下一段话:

  好了,终于找到不完整的答案了。反正我是绝不会再将浮点数直接比较了:

  我参照这篇文章写了这个例子:

  #include

  #include

  main()

  {

  float d1, d2, d3, d4;

  d1 = 194268.02;

  d2 = 194268;

  d4 = 0.02;

  d3 = d1 - d2;

  if (d3 > d4)

  printf(">0.02/n");

  else if (d3 < d4)

  printf("<0.02/n");

  else

  printf("=0.02/n");

  printf("%f - %f = %f /n", d1,d2,d3);

  system("pause");

  }

  请看结果:

  <0.02

  194268.015625 - 194268.000000 = 0.015625

  即:194268.02 - 194268.0 不等于 0.02!

  存进去的数居然会变!怕了吧

  4个变量改成double型的,再测试

  这是结果

  <0.02

  194268.020000 - 194268.000000 = 0.020000

  明明是0.02啊,怎么还是小于

  这次没有改我存的数了吧 WHY

  我说,我怕了,以后我再不敢用浮点数直接作相等比较了!

  还是那句话:浮点数都是有精度限制的。

  所以你存的数,不一定就是你要的数。

  虽然这件事很值得郁闷,不过我还是很高兴又知道了点东西。

  关于EPSINON,可不是能随便定义的!

  而且应该能想到,double和float的EPSINON是不同的。

  定义成什么呢 不必你去定义了,ANSI C已经定义了这些常量:

  载入头文件

  #include

  就可以引用

  FLT_EPSILON

  DBL_EPSILON

  LDBL_EPSILON

  几个常量了。

      

首页 上一页 1 2 3 下一页 尾页 3/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇C语言main函数生成可执行法 下一篇C中的define 特殊用法

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: