首页 > 用户发贴区 > 编程问题提问区 > 加入变量j结果不一样,为什么?
2008
08-22

加入变量j结果不一样,为什么?

#include <stdio.h>
void main()
{int i;
 float a=1,b=2,m=0,j,t;
for(i=1;i<=20;i++)
{
 j=b/a;
m=m+j;
t=b;
b=a+b;
a=t;
}
printf(“%f\n”,m);
}
此程序的值为32.660263


#include <stdio.h>
void main()
{int i;
 float a=1,b=2,m=0,t;
for(i=1;i<=20;i++)
{


m=m+b/a;
t=b;
b=a+b;
a=t;
}
printf(“%f\n”,m);
}
此程序的值为32.660259
两个程序的区别就在将变量J的引入上这是为什么?用不用在意它,请指教!多谢!


加入变量j结果不一样,为什么?》有 6 条评论

  1. TONYAZITEN 说:

    还真想不通是为啥 等高手~~~

  2. mhjerry 说:

    把float全部换成double,结果就一样了。

    这种精度问题,我们老师平时基本不要我们考虑!

  3. TONYAZITEN 说:

    那为什么全是float就不行?

  4. mhjerry 说:

    这种精度问题,我们老师平时基本不要我们考虑!

    可能由于float精度不够,举一例子,

    保留两位小数

    b=5,a=3,m=1.345;

    j=b/a=5/3=1.67;

    m=m+j=1.345+1.67=3.02;

    m=m+b/a=1.345+1.66666666666667=3.01;

    可能是由于在j=b/a中已经丧失一些精度,我也不知对不对,等高手吧!

  5. TONYAZITEN 说:

    我在两种代码中加入了一个printf()用来打印出每一步b/a的值。第一种打印的就是j值,第二种就直接打印b/a的值,发现在可打印的范围内只有一组的结果差0.000001,其他都是一样的,实在想不通最后怎么会差0.000004.可能就是精度的问题.等高手ing~~~

  6. hwwyhy 说:

    mhjerry
    说得没错,就是这个精度的原因。因为float只有6位小数,后面的就截取了,所以j的值总是要比b/a相差那么一点点的

留下一个回复