#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的引入上这是为什么?用不用在意它,请指教!多谢!
>> 本文固定链接: http://www.vcgood.com/archives/2651
还真想不通是为啥 等高手~~~
把float全部换成double,结果就一样了。
这种精度问题,我们老师平时基本不要我们考虑!
那为什么全是float就不行?
这种精度问题,我们老师平时基本不要我们考虑!
可能由于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中已经丧失一些精度,我也不知对不对,等高手吧!
我在两种代码中加入了一个printf()用来打印出每一步b/a的值。第一种打印的就是j值,第二种就直接打印b/a的值,发现在可打印的范围内只有一组的结果差0.000001,其他都是一样的,实在想不通最后怎么会差0.000004.可能就是精度的问题.等高手ing~~~
mhjerry
说得没错,就是这个精度的原因。因为float只有6位小数,后面的就截取了,所以j的值总是要比b/a相差那么一点点的