如何计算概率之和的对数,即ln(p1 + p2),其中p1 =非常小的数,p2 =非常小的数。使用lp1 = ln(p1)和lp2 = ln(p2)
的值如果p1和p2非常小,则会发生下溢。怎么避免这个?
答案 0 :(得分:4)
通常,以下提示对于在r
中记录日志非常有用:
log(1+x)
用于非常小的x
,则功能log1p
会更准确(另请参阅expm1
)。log(x^a)
= a*log(x)
log(a*x)
= log(a) + log(x)
log(1e-308)
不会遭受下溢。计算exp(-1e308)
是不同的,但这远远小于任何可表示的答案。解决问题的一种方法可能是(假设p1
且p2
小于$ 10 ^ -308 $)来计算log(p2)和p1 / p2,然后
log(p1 + p2)= log(1 + p1 / p2)+ log(p2)
使用log1p
计算第一个词,你已经有了第二个词。