2016-03-07 59 views
0

我有一個非常小的指數值(例如exp(n),與n<-300),這是從高斯PDF生成的列表。計算指數數字的數值問題(來自高斯PDF)

我想計算出有多少他們每個人是成正比的總和,例如像下面的蟒蛇般的僞代碼所做的:

s = 0 # sum of all values 
for n in exponents: 
    s += exp(n) 

for n in exponents: 
    k = exp(n)/s # I want to compute k for each n 

的問題是,因爲n值都非常小,總和s有時會變成零,我會得到除零誤差。

我知道我可以做的一件事就是向所有n添加一個常數值(比如說300)以防止下溢,但在其他情況下會導致溢出。

我該如何解決這個問題?

我不知道我是否清楚地表達了自己,如果其中任何一個都沒有意義或任何語法錯誤,請糾正我。 在此先感謝。

回答

1

正如您已經觀察到的,您可以通過從所有n減去常數值m來完成。

爲避免溢出,請不要選擇固定的m,如m = - 300。相反,選擇m是所有n中的最大值。那麼每個標準化的指數值將最多爲1,因此標準化的總和最多是指數的數量,這應該是相當小的。