快疯了,新人求助统计数据次数,为什么明明相等,==却总是判断不成功??
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那个条件里。快疯了。
是不是有必要把全部程序都贴上?

看来double不能之间判断换成int来判断就对了
学习一下浮点误差吧
浮点数不是这样比的
double的最后几位是随机生成的,当然不相等喽~
浮点数的精度问题。。
double的最后几位是随机生成的,当然不相等喽~随即生成的。。。应该不对吧
学习一下浮点误差吧浮点数比较相等好像是这样的 fabs(a-b)<=1e-6
学习一下浮点误差吧浮点数比较相等好像是这样的 fabs(a-b)<=1e-6言之有理
使用fabs()函数处理吧,直接比较是不行的
浮点数的比较,用==麻烦多多,建议楼主对两数进行做差运算,当差小于某一很小精度时,可以认为它们是相等的。如:if(abs(w[u]-w[i]) < 1e-6)
浮点误差
if((dTestVal >= -EPSINON) && (dTestVal <= EPSINON)); //EPSINON 为定义好的精度,若是浮点型数据用等号不行,应如此判断。
谢谢大家。。。第一次发贴没想到回复得这么热情。用了7楼的方法,的确没有错了。