C语言,关于多项式求π的精度问题。

题目描述:用公式π/4≈1-1/3+1/5-1/7+ 求其近似值,直到发现某一项加数的绝对值小于1e-6为止。
我写了如下图所示的程序来解决这个问题,得到的结果离计算器计算出来的π/4的大小(0.785 )差距很多,请问这是因为什么?float精度的问题吗?还是?

img


代码段:

        int i=0;            //控制循环
    float mu=1.0;        //分母的值
    float present=-1.0;    //当前加数
    float sum=0.0;        //求和
    for(i=0;;)
    {
        if(fabs((float)present)<1e-6)
            break;
        else
        {
            present=-(present/mu);
            sum+=present;
            mu+=2;        
        }
    }
    printf("π/4的值为:%f\n",sum);

感谢!

#include <stdio.h>
#include <math.h>
int main()
{
        int i=0;            //控制循环
    float mu=1.0;        //分母的值
    float present=-1.0;    //当前加数
    float sum=0.0;        //求和
	int flag = 1;
    for(i=0;;)
    {
        if(fabs((float)present)<1e-6)
            break;
        else
        {
            present=1/mu*flag;
            sum+=present;
            mu+=2;     
			flag = -flag;
        }
    }
    printf("π的值为:%f\n",sum*4);

	return 0;
} 

 

你用的公式,收敛速度太慢,我算到100项,pi=3.1315929035585537,要换一个公式