#include
double pi(double e);
int main()
{
double result, e;
printf("enter a float number:\n"); // 此处不需要写e,因为不输出它
scanf("%lf", &e);
result = pi(e);
printf("final result is %.4lf\n", result);
}
// 你的算法逻辑有点问题
double pi(double e)
{
double result = 1.0, item = 1.0;
int i = 0;
do
{
// item像这样把两组作为一项
// an = (2n+2)^2 / ((2n+1)(2n+3))
item = (2.0 * i + 2.0) * (2.0 * i + 2.0) / (2.0 * i + 1.0) / (2.0 * i + 3.0);
result *= item;
i++;
// 看通项可以知道item->1,
// 所以判断item-1是否小于阈值e
} while(item - 1 > e);
return result*2;
}
item没有初始化。把double result,item;改成double result,item=1.0试试……另外,觉得while循环逻辑好像也不对。似乎要改如下:
while(i<100){//item永远是正数,干嘛还要fabs?并,e是什么?怎么与之比较?
item=a*1.0/b;//原来是a/b,这样永远是1或0.
result=result*item;//似乎要与第一句次序调换一下才对.
if(i%2==0)
a+=2;
else
b+=2;
i++;
}
楼主能给说说pi()函数是啥意思么?这是计算什么的?什么算法?我看不明白。多谢。