使用do-while循环逼近幂级数-C

时间:2018-09-10 19:47:25

标签: c loops do-while numerical-methods approximation

标题几乎是不言自明的。我试图近似一个可以写为f(x)=x¹/(1x2)-x³/(3x4)+ x ^(5)/(5x6)+ ...的级数,条件是总和应停止当术语的模块低于用户输入的公差时。因此,例如,如果x = 0.5且公差= 0.01,则结果应为0.239583,因为那是前两项的总和(均高于0.01)。下面的代码仅计算第一项,然后由于我无法弄清楚的原因而停止循环。如何进行?

int main()
{
    double x, e, result=0, term;
    int i=1;

    printf("Write some value to x: ");
    scanf("%lf", &x);

    if(x<-1 || x>1)
    {
        printf("Invalid number");
    }

    else
    {
        printf("Write the tolerance: ");
        scanf("%lf", &e);

        do
        {
            term=(pow(x, 2*i-1)*pow(-1, i+1))/((2*i-1)*(2*i));
            result+=term;
            i+=1;
        }
        while(abs(term)>=e);

        printf("The result is: %.6lf", result);
    }

    return 0;
}

1 个答案:

答案 0 :(得分:3)

abs()函数来自stdlib.h,并具有签名int abs(int x)。由于您使用浮点数进行调用,因此该数字会被截断。在这种情况下,截断的数字为0,小于公差,因此循环会提前退出。

您要使用fabs(),它是abs()的浮点版本math.h。它具有签名double fabs(double x)