求P的值?
P/2=
1+
1/3+
1/3×2/5+
1/3×2/5×3/7+
1/3×2/5×3/7×4/9+…
求满足精度ε的P值?
~
分析
每1行为1个求和单元,
每增加1行,
求和单元多乘1个分数(乘数单元),
分子规律1234…
分母规律3579…(差为2的等差数列)
~
程序
double P(ε)
{
double s=0.0,t=1.0,ε;
int n;
for (n=1;t>ε,n++)
return (2.0*s);
}
~
解释
double P(ε)
/*实型数据用双精度*/
{
double s=0.0,t=1.0,ε;
/*第一项求和因子为1,没有规律,故直接定义为初始值*/
int n;
for (n=1;t>ε,n++)
/*当t>ε时,继续循环。
当t<=ε时,停止循环,保证精度在ε以下*/
/*每增加1行,多乘1个分数,
分子n,分母2n+1*/
return (2.0*s);
/*P/2=s,P=2s*/
}
计算过程
已知
s=0,s=s+t,
t=1,t=t×n/(2n+1),
当t=1、n=1时,
s=0+1=1,t=1×1/3=1/3
当t=1/3、n=2时,
s=1+1/3,t=1/3×2/5
当t=1/3×2/5、n=3时,
s=1+1/3+1/3×2/5,t=1/3×2/5×3/7
当t=1/3×2/5×3/7、n=4时,
s=1+1/3+1/3×2/5+1/3×2/5×3/7,
t=1/3×2/5×3/7×4/9
...
当t<=ε时,
停止循环。