用c语言计算圆周率出错,#includemain(){float pi=0,t=1;int i=1;do{t=1/(float)(2*i-1);if(i%2==0) t=-t; /*printf("%d ",t);*/pi+=t;i++;}while(fabs(t)>0.00001);printf("pi=%f\n",4*pi);getch();}以上是我用公式 pi/4=1-1/3+1/5-1/7+.计算圆周
来源:学生作业帮助网 编辑:作业帮 时间:2024/07/01 14:12:55
![用c语言计算圆周率出错,#includemain(){float pi=0,t=1;int i=1;do{t=1/(float)(2*i-1);if(i%2==0) t=-t; /*printf(](/uploads/image/z/6971966-62-6.jpg?t=%E7%94%A8c%E8%AF%AD%E8%A8%80%E8%AE%A1%E7%AE%97%E5%9C%86%E5%91%A8%E7%8E%87%E5%87%BA%E9%94%99%2C%23includemain%28%29%7Bfloat+pi%3D0%2Ct%3D1%3Bint+i%3D1%3Bdo%7Bt%3D1%2F%28float%29%282%2Ai-1%29%3Bif%28i%252%3D%3D0%29+t%3D-t%3B+%2F%2Aprintf%28%22%25d+%22%2Ct%29%3B%2A%2Fpi%2B%3Dt%3Bi%2B%2B%3B%7Dwhile%28fabs%28t%29%3E0.00001%29%3Bprintf%28%22pi%3D%25f%5Cn%22%2C4%2Api%29%3Bgetch%28%29%3B%7D%E4%BB%A5%E4%B8%8A%E6%98%AF%E6%88%91%E7%94%A8%E5%85%AC%E5%BC%8F+pi%2F4%3D1-1%2F3%2B1%2F5-1%2F7%2B.%E8%AE%A1%E7%AE%97%E5%9C%86%E5%91%A8)
用c语言计算圆周率出错,#includemain(){float pi=0,t=1;int i=1;do{t=1/(float)(2*i-1);if(i%2==0) t=-t; /*printf("%d ",t);*/pi+=t;i++;}while(fabs(t)>0.00001);printf("pi=%f\n",4*pi);getch();}以上是我用公式 pi/4=1-1/3+1/5-1/7+.计算圆周
用c语言计算圆周率出错,
#include
main()
{
float pi=0,t=1;
int i=1;
do
{
t=1/(float)(2*i-1);
if(i%2==0) t=-t; /*printf("%d ",t);*/
pi+=t;
i++;
}while(fabs(t)>0.00001);
printf("pi=%f\n",4*pi);
getch();
}
以上是我用公式 pi/4=1-1/3+1/5-1/7+.计算圆周率的程序,但在tc2.0上运行时陷入死循环.
我发现t的值在开始还是正确的,到后来越算越离谱,先减小,又增大,再减小,再增大,如此循环下去,太诡异了.
谁能告诉我这是为什么?
用c语言计算圆周率出错,#includemain(){float pi=0,t=1;int i=1;do{t=1/(float)(2*i-1);if(i%2==0) t=-t; /*printf("%d ",t);*/pi+=t;i++;}while(fabs(t)>0.00001);printf("pi=%f\n",4*pi);getch();}以上是我用公式 pi/4=1-1/3+1/5-1/7+.计算圆周
程序逻辑没有问题,主要问题是数据类型不合适.
可以自己计算,当fab(s)=0.00001时,i肯定是大于32767的,而int类型最大所能表示的也就是32767了.因此,当程序运行到i=32767时,下一步就是i=-32768了,然后i=-32767……
可以将i定义为long int i=1,这样子就可以了.最后结果如下:
i=50001
pi=3.141616