主题:一个关于计算PAI值的问题(PAI指的是数学里的希腊字母)
nimingzhe2008
[专家分:0] 发布于 2011-03-31 21:55:00
题目:
编程用PAI/4=1-1/3+1/5-1/7+1/9-...公式,求PAI的近似值,直到最后一项的绝对值小于10^(-6)为止,并输出结果。
我的代码:
#include<stdio.h>
int main()
{
float x=0.0,sign=1.0;int i;
for(i=1;1.0/(2*i-1)<1/1000000;i++)
{
x=x+sign/(2*i-1);
sign=sign*(-1);
};
printf("%f",4.0*x);
getchar();
return 0;
}
为什么我的代码运行后结果为零啊
回复列表 (共8个回复)
沙发
bruceteen [专家分:42660] 发布于 2011-04-01 08:15:00
1/1000000 不如直接写成 0
板凳
cgl_lgs [专家分:21040] 发布于 2011-04-01 11:12:00
for(i=1;1.0/(2*i-1)<1/1000000;i++)
改为:
for(i=1;1.0/(2*i-1)<1e-6;i++)
3 楼
cgl_lgs [专家分:21040] 发布于 2011-04-01 11:14:00
另:
int i;
改为:
long i;
会保险些,因为不知道你是在VC下跑还是TC下~~~~
4 楼
樾葥哖虢 [专家分:0] 发布于 2011-04-01 19:27:00
嗯,就这样
5 楼
爱缡的夏 [专家分:0] 发布于 2011-04-08 01:36:00
初略看了下,你for语句里的判断条件就反了啊。判断条件为直到最后一项的绝对值小于10^(-6)为止,意思就是当直到最后一项的绝对值大于10^(-6)时执行累加啊。
6 楼
lhansheng [专家分:0] 发布于 2011-04-08 10:24:00
同意楼上的,要不然这是一个死循环程序?
7 楼
爱缡的夏 [专家分:0] 发布于 2011-04-08 13:14:00
[quote]同意楼上的,要不然这是一个死循环程序?[/quote]
不是死循环,只是不执行循环体,所以最后得值PAI=0
8 楼
wukaikailive [专家分:80] 发布于 2011-04-14 23:37:00
加上一个头文件math.h然后主函数这样改:
int sign=1;double pi=0.0,n=1.0,term=1.0;
while(fabs(term)>=1e-6)
{
pi=pi+term;
n=n+2;
sign=-sign;
term=sign/n;
}
pi=pi*4;
printf("pi=%10.8f\n",pi);
return 0;
我来回复