作业帮 > 综合 > 作业

sum=sum*i/(2* i+1)和sum*=i/(2*i+1)的区别

来源:学生作业帮 编辑:拍题作业网作业帮 分类:综合作业 时间:2024/04/28 20:01:40
sum=sum*i/(2* i+1)和sum*=i/(2*i+1)的区别
#include
#include < conio.h >
#include
double fun( double eps)
{
double t=1.0,sum=1.0;
int i=1;
while (sum>=eps) /* 当某项大于精度
要求时,继续求下一项*/
{sum=sum*i/(2* i+1); /* 求多
项式的每一项*/
t=t+sum; /*累加求和*/
i++;
}
return 2*t;
}
void main ()
{
double x;
printf ("Input eps : ") ;
scanf("%lf",&x);
printf("\neps =%lf, PI =%lf\n",
x, fun(x));
}
#include
#include < conio.h >
#include
double fun( double eps)
{int i=1;
double t=1.0,sum=0;
while(t>=eps)
{
sum+=t;
t*=i/(2*i+1);
++i;
}
return 2*sum;
}
void main ()
{
double x;
printf ("Input eps : ") ;
scanf("%lf",&x);
printf("\neps =%lf, PI =%lf\n",
x, fun(x));
}为什么结果不一样?
假如i=5时就退出while循环,
一:
sum+=t;
\x05t*=i/(2*i+1); //当i=5时,这个 t*= 5/11 ,sum 并没有把 i=5时的 t 值相加
\x05++i;
你这样写相当于 while do 先判断再加
二:
sum=sum*i/(2* i+1); // 当i=5时,这个 sum*= 5/11 \x05\x05\x05\x05\x05\x05\x05
\x05\x05t=t+sum; // 这里 把 i=5时的 值加到 t 了
\x05\x05i++;
这一段相当于 do while 先加再判断
多加一项,所以两者的结果不一样
再问: 不过在vissual C++6.0里运行第一个程序会出来正确结果而第二个程序无论精度怎么调,结果都是2,不知道为什么,感觉是这两个语句应该是一样的啊
再答: 方法一: while (sum>=0.05) /* 当某项大于精度 要求时,继续求下一项*/ { sum=sum*i/(2* i+1); // i=4时 sum= 0.0253968253968 t=t+sum; // 这里 就把 i=4时的项 sum= 0.0253968253968 累加进来了。 i++; // i 自加 i=5; } 结果 eps=0.05 i=5 sum = 0.0253968253968 t=1.54920634921 2*t=3.09841269841 方法二: while(t>=0.05) { sum+=t; // 在这里累加,但是却没有把最后一项累加进来,少了最后一项的累加 t*=i/(2*i+1); //i=4时 t= 0.0253968253968 =0.05) { sum+=t; // 在这里累加,但是却没有把最后一项累加进来,少了最后一项的累加 t*=i/(2*i+1); //i=4时 t= 0.0253968253968