首页 > 代码库 > 近似运算

近似运算

计算兀/4=1-1/3+1/5-1/7+……,直至最后一项小于10的-6次方。

错误做法:

#include<stdio.h>#include<math.h>int main(){    int i;    double t,m;    m=3.14159/4.0;    for(i=1;;i++)    {        if(i%2==0)            t=(double)-(1/(2*i-1));//括号里面的运算还是整数之间的,得不到double型,强制转换加错地方了        else            t=(double)1/(i*2-1);        while(fabs(t)>(1E-6))//主要问题在这里,你第一次t肯定很大进到这里来一直while出不去所以死循环了        {            m+=t;        }        break;    }    printf("%lf\n",m);//对于double型,scanf里面写%lf,printf里面写%f比较合适//可以把m初始化为0然后这么加完乘以4得到的应该就是pi的值了,现在这么加结果无意义    return 0;}

 

正确:

#include<stdio.h>#include<math.h>int main(){    int i;    double t,m;    m=0;    for(i=1;;i++)    {        if(i%2==0)            t=-(1.0/(2*i-1));      else            t=1.0/(i*2-1);        if(fabs(t)>(1E-6))      {            m+=t;        }        else break;    }    printf("%f\n",m*4);        return 0;}

 

希望还有更好的方法提供……