我使用公式exp(X)作为马尔可夫链的比率。因此,选择一个链接与另一个链接的比率是exp(X1)/ exp(X2)。我的问题是,有时X非常大,因此exp(X)将超出double
的范围。
或者:给定一个X [i]数组,其中一些X [i]如此之大以至于exp(X [i])溢出double
的范围,为每个i计算exp(X [ i])/ S,其中S是所有exp(X [i])的总和。
答案 0 :(得分:3)
这个伪代码应该有效:
Let M = the largest X[i].
For each i:
Subtract M from X[i].
Let S = the sum of exp(X[i]) for all i.
For each i:
The probability for this i is exp(X[i]) / S.
如果M很大,则在减法步骤之后,一些X [i]将如此小(具有大的负值),使得它们的exp(X [i])将以双精度计算为零。然而,这些项目的实际概率是如此微小,以至于它们的实际概率和零之间没有实际差异,所以exp(X [i])下溢为零是可以的。
除了下溢和舍入误差之外,减法变换后的概率应该相同,因为: