MATLAB中的log1p函数

时间:2016-09-11 00:29:15

标签: matlab precision floating-accuracy logarithm

任何人都可以帮助澄清log1p参考页面中以下句子的含义。

  

y = log1p(x)计算log(1 + x),补偿1 + x中的舍入。

我看source code,我不明白如何重写函数如下有帮助:

p1 = xs + 1;
careful = xs.*log(p1)./(p1-1);

在MATLAB中,当xs很小时,(xs + 1)的舍入误差比log函数差吗?

提前致谢。

1 个答案:

答案 0 :(得分:1)

首先,小(xs + 1)的{​​{1}}的舍入误差不是MATLAB特定的问题,而是大多数流行计算机语言中双精度数表示的自然结果。 IEEE 754 double number仅允许~16个有效十进制数字。如果您添加两个间隔超过16个数量级的数字,例如xs1,则结果1e-32不能全部符合双数,{{1}部分将被有效截断,因此您将获得1.000...[32x]...0001。这就是舍入错误的来源。

在您的代码段中,当1e-32足够小时,1 + 1e-32 == 1xs,然后p1将变为=1。发生这种情况时,您知道careful太小而无法在常规计算过程中使用,因此我们也可以返回NaN。但请注意,这不是MATLAB中xs的官方来源,而是其他人的经验解决方案,旨在模仿xs的行为。