2016-03-07 57 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,因此标准化的总和最多是指数的数量,这应该是相当小的。