<math.h>
为计算log(1+x)
的{{1}}提供了更准确的方法。
是否有类似的精确计算方式double
?
我问的原因是因为我试图在对数空间中做一些工作以获得更高的精度(我主要是乘法和求和数非常接近于零)。我发现使用log(1-x)
编写一个能够log( exp(log_of_a) + exp(log_of_b) ) = log( a + b )
的函数很容易。我正在努力为差异做出类似的功能:
log1p
当然是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
。为了以防万一,我甚至用Google搜索了log1m,但没有运气......
当论据log( 1 - ... )
在x
范围内时,我可以简单地使用[-inf, 1)
(鉴于我的断言log1p(-x)
)。
这是解决这个问题的最佳方法吗?我觉得我必须做以前做过的工作......
我非常感谢您的帮助,知道如何获得最准确的结果(或解释为什么我不能得到比这更准确的结果)。
答案 0 :(得分:13)
@Raymond Chen的观点是:“浮点数的否定是准确的,因此log1p(-x)
与log1p(x)
一样准确。”只是把它变成一个真正的答案。