求π近似值,我不明白为什么while语句表达式1e-6,0.00001,循环数字肯定比这个数大,那么这个循环不是一直会循环,不会停止么,为什么还能执行下面的printf,而且能起到限制小数点六位的作用

img

img

#include<stdio.h>
#include<math.h>
int main(){
float sum= 0;
float fenzi = 1;
float fenmu= 1;
float fenshu=fenzi/fenmu;
int s=1;
while (fabs (fenshu)>=1e-6){
sum=sum+fenshu;
fenmu+=2;
s=-s:
fenshu=s*(fenzi/fenmu);
}
printf ("%f", 4*sum);

}

题主的问题在于“循环数字肯定比这个大”,实际上若令n表示循环次数,则循环数字的绝对值是1/(2*n-1),当n不断增大的时候,循环数字的极限是0,因此后面肯定会小于1e-6的。实际上我们可以算出相应的n,其满足1/(2n-3)>1e-6>1/(2n-1),可得n=(10^6+2)/2=500001。PS. 题主的描述中似乎有个小问题,1e-6不是0.00001而是0.000001。

float sum= 0; float fenzi = 1; float fenmu= 1; float fenshu=fenzi/fenmu;
提高精度,几个变量都改为用 double 型。