圆周率问题_求圆周率问题,代码为什么不对

原问题:求圆周率问题,代码为什么不对
分类:编程开发 > 最后更新时间:【2016-12-12 13:17:40】
问题补充:

#include<stdio.h>

double pi(int n)

{

float i,s1=0,s2=0,s=0;

for(i=1;i<=n;i++)

{

if(n%2!=0)

{

s1+=1/(2*n-1);

}

if(n%2==0)

{

s2+=-1/(2*n-1);

}

}

s=s1+s2;

return 4*s;

}

int main()

{

int n;

scanf("%d",&n);

printf("%f\n",pi(n));

}

最佳答案

程序有多个问题,

1.注意C的类型

2.注意循环变量

改好的函数参考:

double pi(int n)
{
int i;
float s1 = 0, s2 = 0, s = 0;
for(i = 1; i <= n; i++)
{
if(i % 2 != 0)
{
s1 += 1.0 / (2 * i - 1);
}
if(i % 2 == 0)
{
s2 += -1.0 / (2 * i - 1);
}
}
s = s1 + s2;
return 4 * s;
}


追问:
但是当n=100时,测试案例结果是3.131593,但是这个代码算出来的结果是3.131595,请问是什么原因呢?
  • 追答:
    浮点有误的,且float与double精度不同改float s1 = 0, s2 = 0, s = 0;为double s1 = 0, s2 = 0, s = 0;且改 printf("%f\n",pi(n)); 为 printf("%lf\n",pi(n));结果就应该与你的测试案例相同了
    最佳答案由网友  whoami1978  提供
  • 公告: 为响应国家净网行动,部分内容已经删除,感谢网友理解。
    12

    分享到:

    其他回答

    暂无其它回答!

      推荐