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

问题描述 投票:1回答:1

标题几乎是不言自明的。我试图近似一个可写为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;
}
c loops do-while numerical-methods approximation
1个回答
3
投票

abs()功能来自stdlib.h并有签名int abs(int x)。由于您使用float调用它,因此数字会被截断。在这种情况下,截断的数字是0,小于容差,因此循环提前退出。

你想使用fabs()abs()的浮点版math.h。它有签名double fabs(double x)

© www.soinside.com 2019 - 2024. All rights reserved.