<math.h>
提供了一种更准确的方法来计算double
类型的log(1+x)
。
是否有类似精确的方法可以计算log(1-x)
?
之所以问这个问题,是因为我正在尝试在对数空间中进行一些工作,以获得更高的精度(我主要是在非常接近零的数字上做乘法和求和)。我发现使用log1p
编写一个函数,可以给出log( exp(log_of_a) + exp(log_of_b) ) = log( a + b )
,非常容易。我正在尝试为差异编写类似的函数:
log( exp(log_of_a) - exp(log_of_b) ) = log( a - b )
当然,a > b
。
基本上,只要log_a
和log_b
都不等于-inf
,该函数应简单地返回:
return log( 1 - exp(log_b-log_a) ) + log_a;
在我的log_add
函数中,我最终得到一个log( 1 + ... )
,因此我使用log1p
。但是这里是log( 1 - ... )
。为了以防万一,我甚至搜索了log1m,但没有成功...当参数
x
在范围[-inf, 1)
内时,我可以简单地使用log1p(-x)
(给定我的断言a > b
)。这是解决这个问题的最佳方法吗?我感觉自己正在做之前已经做过的工作...
我真的很感激您帮助我知道如何得到尽可能准确的结果(或解释为什么我不能得到比这更准确的结果)。
log( exp(log_of_a) - exp(log_of_b) ) = log( a - b )
,对吗?你有a + b
。 - Gabelog1p(-x)
和log1p(x)
的准确度相同。 - Raymond Chen