函数 e^x 的泰勒级数

Taylor series of function e^x

给定一个数字 x。您需要计算 e^x 的泰勒级数之和。

e^x = 1 + x + x^2/2! + x^3/3! + ...

计算总和直到一个总数小于或等于10^(-9)。

下面是我的解决方案,但对于 x<0 数字是错误的。你知道如何解决这个问题以使其适用于负数吗?

    int x,i,n;
    long long fact; //fact needs to be double
    double sum=0,k=1;
    scanf("%d",&x);
            i=0; sum=0; k=1;
                while (fabs(k)>=1.0E-9) {
                    fact=1;
                    for (int j=1;j<=i;++j)
                        fact*=j;
                    k=pow(x,i)/fact;
                    sum+=k;
                    ++i;
                }
    printf("%lf\n",sum);

您不应使用 pow 函数将(可能为负的)数计算为整数次方。而是像计算阶乘一样使用重复乘法。

另请注意,您可以存储 $n!$ 和 $x^k$ 的最后计算值,以通过一次乘法获得 $(n+1)!$ 和 $x^{k+1}$ .

你的问题是你的阶乘计算溢出并变成了垃圾。 之后,您的 ith 项不再减少并产生完全错误的结果。

经过 20 次迭代后,64 位数字不能包含 20! 的值。参见:http://www.wolframalpha.com/input/?i=21%21%2F2%5E64

如果 x^n/n!n=20 时不低于您的阈值 (1e-9),那么您对 ​​n! 的计算甚至会溢出 64 位整数。当发生这种情况时,您将获得 n!2^63 的值(我进行了简化,因为您没有使用无符号整数,您将获得随机负值,但原理仍然存在)。这些值可能非常低而不是非常高。这将导致您的 x^n/n! 变得更大而不是更小。

fact需要double,不能long long因为divide。