我正在使用线性插值,我必须计算:
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)
等。
我正在使用线性插值,我必须计算:
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)
等。
通常的方法是找到最大的项,并计算总和作为修正的时间。更详细
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]) )将为一。