泰勒级数实现对数的问题

Problem with Taylor Series implementation of logarithm

我尝试使用泰勒展开式生成一个函数输出,其近似值是 x 的对数(x 是一个浮点数)。

自然对数的泰勒级数:

ln(x) = {n=0 (sigma) inf} (-1)^n*(x-1)^(n+1)/(n+1)

(使用 sigma 求和)更清晰的泰勒展开图,请参见 https://en.wikipedia.org/wiki/Taylor_series#First_example

进一步:log(a,b)=log(a)/log(b)(a为底)

下面是我使用这些原理的实现:

double logtaylor(double a,double b,double prec)
{
    double suma=0,sumb=0,n;


    for(n=0;n<prec+1;++n)
    {
            suma+=(pow(-1,n)*pow(a-1,n+1)/(n+1));
            sumb+=(pow(-1,n)*pow(b-1,n+1)/(n+1));
            printf("%d)suma=%lf\n",(int)n,suma);
            printf("%d)sumb=%lf\n",(int)n,sumb);
    }


    return suma/sumb;
}

我正在测试以 2 为底的 log of 3 -logtaylor(2,3,30)- 精度级别为 30。

输出:

math.h: 0.630930
0)suma=1.000000
0)sumb=2.000000
1)suma=0.500000
1)sumb=0.000000
2)suma=0.833333
...
26)suma=0.711323
26)sumb=3272620.000449
27)suma=0.675609
27)sumb=-6314360.570980
28)suma=0.710091
28)sumb=12198429.497986
29)suma=0.676758
29)sumb=-23592964.635348
30)suma=0.709016
30)sumb=45680701.429168

除了变量之外,求和 a 和 b 的两个语句完全相同,但是它们的行为完全 different.suma,非常接近实际值 - 在数学中计算 header.I 使用 calc 确认也 (log(2,3)~0.63092975356)- 而它的对应物正偏离巨大地攀升至数百万。我无法全神贯注。我感谢任何帮助。提前致谢。

ln的泰勒级数收敛域为(0, 2)。在此之外,级数不会收敛到ln的值x;它将数量级永远增长。换句话说,你遇到的是数学问题,而不是软件问题——软件正确地评估了该级数,但泰勒级数并不近似于 0 之外的 ln x < x ≤ 2.