泰勒系列函数e ^ x

时间:2015-10-25 19:04:15

标签: c taylor-series

给出一个数字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);

3 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

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

经过20次迭代后,64位数不能包含20!的值。请参阅:{{3}}

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

答案 2 :(得分:0)

事实上需要加倍,因为分歧而不能长久。