用c语言计算圆周率出错,万望高人指点迷津

来源:百度知道 编辑:UC知道 时间:2024/06/21 19:50:24
#include<math.h>
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的值在开始还是正确的,到后来越算越离谱,先减小,又增大,再减小,再增大,如此循环下去,太诡异了。
谁能告诉我这是为什么?????

程序逻辑没有问题,主要问题是数据类型不合适。
可以自己计算,当fab(s)=0.00001时,i肯定是大于32767的,而int类型最大所能表示的也就是32767了。因此,当程序运行到i=32767时,下一步就是i=-32768了,然后i=-32767……

可以将i定义为long int i=1,这样子就可以了。最后结果如下:
i=50001
pi=3.141616