4
如何可靠地添加大指数项而不会出现溢出错误?
蒙特卡洛马尔可夫链中一个非常普遍的问题涉及计算概率,这些概率是大指数项的和, ea1+ea2+...ea1+ea2+... e^{a_1} + e^{a_2} + ... 其中的各组分可以从非常小的范围内,以非常大的。我的方法是排除最大指数项以便:aaaK:=maxi(ai)K:=maxi(ai)K := \max_{i}(a_{i}) a′=K+log(ea1−K+ea2−K+...)a′=K+log(ea1−K+ea2−K+...)a' =K + log\left( e^{a_1 - K} + e^{a_2 - K } + ... \right) ea′≡ea1+ea2+...ea′≡ea1+ea2+...e^{a'} \equiv e^{a_1} + e^{a_2} + ... 这种做法是合理的,如果所有的元素aaa,如果他们不是很大,但不是一个好主意。当然,较小的元素无论如何都不会对浮点数求和,但是我不确定如何可靠地处理它们。在R代码中,我的方法如下所示: if ( max(abs(a)) > max(a) ) K <- min(a) else K <- max(a) ans <- log(sum(exp(a-K))) + …