圆周率问题_求圆周率问题,代码为什么不对
#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));结果就应该与你的测试案例相同了
其他回答
暂无其它回答!