原题目如下
问题描述
给定一个精度值e,用下列公式计算π的近似值,要求前后两次π的迭代之差的绝对值小于e,给出相应的最小迭代次数n和最后一次计算的π的值。
π/2=1+1!/3+2!/(3*5)+3!/(3*5*7)+...+(n-1)!/(3*5*7*...*(2n-1))
输入形式
从控制台输入e( e>=0.000001 )的值。
输出形式
输出迭代次数n和最后一次计算的π的值(以一个空格分隔,并且输出π时要求小数点后保留7位有效数字)。
样例输入
0.000003
样例输出
19 3.1415912
样例说明
输入的精度e为0.000003,当n为17时,计算的π值为3.1415864,n为18时计算的π值为3.1415896,两者之差为0.0000032,大于给定的精度值,所以需要继续计算。当n为19时,计算的π值为3.1415912,与上次之差为0.0000016,小于给定的精度值,所以最小迭代次数为19,输出的π值为3.1415912。
注意:
(1) 为保证计算精度,请使用double数据类型保存计算数据。
(2) 应至少迭代两次,即:n>=2。
遇到的问题:
运行结果不对,无论赋什么值。结果都为3 2.9333333
我的代码如下:
#include<stdio.h>
int main()
{
double e,a=1,b=2,sum=1;
int i,n=1;
scanf("%lf",&e);
for(i=1;b-a>=e;i++)
{
a=a*(double)i/(2*i+1);
sum+=a;
b=a*(double)(i+1)/(2*i+3);
n++;
}
sum=(sum+b)*2;
n++ ;
printf("%d %.7f",n,sum);
return 0;
}
有没有大佬帮我看一下,代码哪里写的有问题呢?