C语言初学者,为什么这个程序输出严重错误的结果

#include <stdio.h>
#include <math.h>
main()
{
int sign=-1;
unsigned int i=3;
float pi=1;
do
{
pi=pi+(sign/i);
i+=2;
sign=-sign;
}
while(i<=100);
pi=pi*4;
printf("pi=%.5f.",pi);
getchar();
}
打算用pi/4=1-1/3+1/5-1/7……这个公式来算pi,但是输出结果是pi=18531721216.0000000000,且不论这个公式如何,这个程序也不能输出这么荒谬的结果啊……用的是codeblocks,到底哪里出错了?望指正

int sign=-1;改为float sign=-1.0即可,这是数据类型出的问题,因为int/int=int,明白了吧!
温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-10-18
溢出和精度损失共同造成的。
sign/i 时,把sign默认转换成无符号整型,得到的结果是一个很大的正数。第一步就溢出了。然后int / int 结果自动取整,把小数部分全舍弃,又发生了精度损失。

把sign或者i 两者之一改成float型即可。
相似回答