编程求教3

来源:百度知道 编辑:UC知道 时间:2024/06/30 21:33:05
#include<stdio.h>
#include<math.h>
main()
{
int i;
float f,s=0.0,p;
for(i=0;i<=500000;i++)
{
if(i%2==0)
f=1/(2*i+1);
else
f=(-1)/(2*i+1);
s+=f;
}
p=4*s;
printf("%f",p);
getchar();
}
为什么无论将i的上限设为多大,求出的p总是整数4呢?
请高手指教!

//建议用double 不用 float double 精确度更高
// f = 1 / (2*i+1) 这样写 f永远等于0 因为是整数相除 等于0然后转为
// float 赋值给f 简单修改一下就可以了 f = (float) 1 / (2*i+1)后
//雷同 不过我用的是double 所以....
#include<stdio.h>
#include<math.h>

main()
{
int i;
double f,s=0.0,p;
for(i=0;i<=500000;i++)
{
if(i%2==0)
f= (double ) 1 / (2*i+1);
else
f= (double ) -1 / (2*i+1);
s+=f;
}
p=4*s;
printf("%.15f",p);
getchar();
}