1

我正在使用线性插值,我必须计算:
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'or log2(p')。如有必要,我还可以计算log2(p_1* \lambda_1)等。

4

1 回答 1

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]) )将为一。

于 2016-04-06T13:44:59.213 回答