|
发表于 2021-4-11 20:24:44
|
显示全部楼层
我觉得是你写的公式不对:
分析如下:
首先:fabs(1/(2*i-1)是求1/(2*i-1)第一次的话就是1/3的绝对值,下一次是1/5的绝对值这个是对的!
但是:sum=sum+pow(-1,i+1)*1/(2*i-1);
第一次的话是:sum=1+pow(-1,3)*1/(2*i-1)-->=1+(-1)的3次方*1/3->1+(-1)=0->导致了被除数为0
所以被除数都是0了,你觉得可能不是0吗?
首先除数是没什么问题的。
问题出现在了被除数,如上所述!
所以我改了你的代码,改动较大,但也是一般的解决思路!所有解释都在注释里,请查看
代码如下:
- #include <stdio.h>
- #include <math.h>
- //用公式π/4=1- 1/3 + 1/5 - 1/7...求π的近似值,直到发现某一项的绝对值小于10^6为止
- int main()
- {
- double pi=0.0,term = 1.0,i=1.0;//term表示当前项->用这个来判断是否小于10^6
- int n=1;// i是除数,n是符号位就是正负
- //fabs是求绝对值的意思
- while(fabs(term)>=pow(10,-6))
- {
- //sum=sum+pow(-1,i+1)*1/(2*i-1);
- pi+=term;//pi等于每个当前项加起来,就算是减法也可以是加法不是吗 所以不用定义sum了
- i+=2;//除数+2每次,从1开始
- n=-1*n;//符号每次变一次
- term=n/i;//求每个当前项
- }
- pi*=4;
- printf("pi=%10.7lf \n",pi);
- return 0;
- }
复制代码
运行结果如下:
OK 希望有用吧! |
|