通过在日志空间中工作避免下溢,您如何评估总和?

时间:2016-04-05 06:09:30

标签: logarithm scientific-computing underflow

我正在使用线性插值,我必须计算:
p' = \lambda_1*p_1 + \lambda_2*p_2 + \lambda_3*p_3

然而,p_1,p_2和p_3是联合概率,因此由于下溢而不能表示为浮点数。所以我在日志空间中工作,采用log2(p_1)log2(p_2)log2(p_3)

鉴于概率的日志,我不太确定如何计算p'log2(p')。如有必要,我还可以计算log2(p_1* \lambda_1)等。

1 个答案:

答案 0 :(得分:0)

通常的方法是找到最大的项,并计算和校正的次数。更详细

q[i] = log( lambda[i]) + log( p[i])) i = 1..
we want Q = log( exp( q[1]) + exp(q[2]) + .. )
let the largest q[i] be q[j], then we get 
Q = log( ( exp( q[1]-q[j]) + exp( q[1]-q[j]) + ..) * exp(q[j]))
  = q[j] + log( exp( q[1]-q[j]) + exp( q[1]-q[j]) + ..)

在评估第二项时,所有q [i] -q [j]都是负数,因此不会发生溢出。如果有任何负面因素导致下溢,则忽略它,因为其中一个术语(exp(q [j] -q [j]))将为1。