我正在使用线性插值,我必须计算:
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)
等。
答案 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。