在处理大和负实数时,有没有人知道如何使下面的Matlab代码更准确地逼近指数函数?
例如,当x = 1时,代码效果很好,当x = -100时,它应该更接近3.7201e-44时返回8.7364e + 31的答案.
代码如下:
s=1
a=1;
y=1;
for k=1:40
a=a/k;
y=y*x;
s=s+a*y;
end
s
Run Code Online (Sandbox Code Playgroud)
欢迎任何帮助,欢呼.
编辑:
好的,问题如下:
这段代码接近哪个数学函数?(我说指数函数.)当x = 1时它是否有效?(是的.)不幸的是,当x = -100时使用它会产生答案s = 8.7364e + 31.您的同事认为该程序中存在一个愚蠢的错误,并请求您的帮助.仔细解释行为并给出一个简单的修复,产生更好的结果.[您必须建议对上述代码进行修改,或者使用它.您还必须检查您的简单修复工作.]
所以我有点明白,当术语之间存在16个(或更多)数量级时,问题会围绕大数字,精度会丢失,但解决方案不能解决.
谢谢
编辑:
所以最后我接受了这个:
s = 1;
x = -100;
a = 1;
y = 1;
x1 = 1;
for k=1:40
x1 = x/10;
a = a/k;
y = y*x1;
s = s + a*y;
end
s = s^10;
s
Run Code Online (Sandbox Code Playgroud)
不确定它是否完全正确但它会返回一些好的近似值.
exp(-100)= 3.720075976020836e-044 …