快疯了,新人求助统计数据次数,为什么明明相等,==却总是判断不成功??
admin 发表于 2010-04-21 | 来源:互联网 | 阅读:

………
int main(void){
 …
  
 for(i=0;i<10;i++)  
 {w[i]=0;
 count[i]=0;
 
 。。。省去若干计算w[i]过程
  printf("w[i] is %f, i is %d \n",w[i],i);
  /*statistics*/ 
  
  
  
  for(u=0;u<i;u++)
  {
  
  if(w[u]==w[i])
  {
  count[u]++;
  u=i+1;}
  }
  
  if(u==i) 
  {count[i]++;
 
  }
  
  
}
是在检查不出问题,
但从显示结果来看,即使我用程序自己打印出w[i]-w[u]的值是0.00000时,程序依旧进不去if那个条件里。快疯了。
是不是有必要把全部程序都贴上? 

已经有13 个评论
  1. wtaxum 说:

    看来double不能之间判断换成int来判断就对了

  2. lchz 说:

    学习一下浮点误差吧

  3. 萌芽邪恶 说:

    浮点数不是这样比的

  4. yyyy6 说:

    double的最后几位是随机生成的,当然不相等喽~

  5. forestyaser 说:

    浮点数的精度问题。。

  6. rongxin 说:

    double的最后几位是随机生成的,当然不相等喽~随即生成的。。。应该不对吧

  7. wtaxum 说:

    学习一下浮点误差吧浮点数比较相等好像是这样的 fabs(a-b)<=1e-6

  8. kook 说:

    学习一下浮点误差吧浮点数比较相等好像是这样的 fabs(a-b)<=1e-6言之有理

  9. dbb123 说:

    使用fabs()函数处理吧,直接比较是不行的

  10. yyyy6 说:

    浮点数的比较,用==麻烦多多,建议楼主对两数进行做差运算,当差小于某一很小精度时,可以认为它们是相等的。如:if(abs(w[u]-w[i]) < 1e-6)

  11. sbamd 说:

    浮点误差

  12. doing7 说:

    if((dTestVal >= -EPSINON) && (dTestVal <= EPSINON)); //EPSINON 为定义好的精度,若是浮点型数据用等号不行,应如此判断。

  13. awaywind 说:

    谢谢大家。。。第一次发贴没想到回复得这么热情。用了7楼的方法,的确没有错了。

我要评论

评论功能因故关闭!

请加入我们的QQ群一起参与讨论:群号59400482(500人超级群)


返回首页 | 关于我们 | 联系我们 | 广告合作 | 网站地图 | 友情链接 | 版权声明