【发布时间】:2021-12-26 21:25:47
【问题描述】:
我在使用泰勒级数计算 e^x 时注意到,当我们为负 x 计算它时,绝对误差很大。是因为我们没有足够的精度来计算它吗?
(我知道为了防止它我们可以使用 e^(-x)=1/e^x)
#include <stdio.h>
#include <math.h>
double Exp(double x);
int main(void)
{
double x;
printf("x=");
scanf("%le", &x);
printf("%le", Exp(x));
return 0;
}
double Exp(double x)
{
double h, eps = 1.e-16, Sum = 1.0;
int i = 2;
h = x;
do
{
Sum += h;
h *= x / i;
i++;
} while (fabs(h) > eps);
return Sum ;
}
例如: x=-40 值是 4.24835e-18 但程序给我 3.116952e-01。绝对误差是 ~0.311
x=-50 值是 1.92875e-22 程序给我 2.041833e+03。绝对误差是 ~2041.833
【问题讨论】:
-
帮助您的读者看到您所看到的。您是如何使用您共享的代码注意到它的?
-
显示
x的值来说明情况,显示您获得的结果,并说明您观察到的绝对错误。 -
在每次迭代中为
h的值添加打印。它正在处理一些相当大的正数和负数,希望得到一个小的结果。 Subtraction is dangerous.
标签: c taylor-series