C语言中这个奇怪的结果错在哪?

来源:百度知道 编辑:UC知道 时间:2024/06/18 10:52:24
循环中的一个循环:
...
for(j=0;j<n;j++)
{
if(yn[i]==0||yn[j]==0||yn[i]==yn[j])
p[i][j]=0;
else
p[i][j]=fabs(1-fabs(yn[i]-yn[j])/fabs(yn[i]));
if(p[i][j]==0)
rr[i][j]=0;
else
rr[i][j]=0.1/(1-pow((p[i][j])/(1+fabs(yn[i]-yn[j])/ymax),0.5));
fprintf(outfp,"yn[%d]=%f yn[%d]=%f p[%d][%d]=%f rr[%d][%d]=%f\n",i,yn[i],j,yn[j],i,j,p[i][j],i,j,rr[i][j]);
}
...
结果如下:
yn[1]=0.045000 yn[0]=0.000000 p[1][0]=0.000000 rr[1][0]=0.000000
yn[1]=0.045000 yn[1]=0.045000 p[1][1]=0.000000 rr[1][1]=0.000000
yn[1]=0.045000 yn[2]=0.080000 p[1][2]=0.222222 rr[1][2]=0.171429
yn[1]=0.045000 yn[3]=0.105000 p[1][3]=0.333333 rr[1][3]=0.190324
yn[1]=0.045000 yn[4]=0.120000 p[1][4]=0.666667 rr[1][4]=0.282085

应该是精度问题,yn[1]和yn[9]不相等,但是由于你输出小数位长度不够,看不到

逻辑或可以这样3变量连用么....
另外因为你测试用的是浮点数,关于==在浮点数中的应用...你需要再看看...
也就是说
yn[1]=0.045000 yn[1]=0.045000 p[1][1]=0.000000
你的if语句起的作用,是因为yn[1]==yu[1]的地址相同而不是值相同 当然..值肯定也相同..
所以yn[1]不等于yn[9]

==在这里比较的是地址 不是值