计算指数数的数值问题(来自高斯PDF)

时间:2016-03-07 03:53:21

标签: math precision gaussian exponential numerical-stability

我有一个非常小的指数值列表(例如exp(n),带有n<-300),它们是从高斯PDF生成的。

我想计算它们中的每一个与总和成比例,例如像下面类似python的伪代码那样:

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 个答案:

答案 0 :(得分:1)

正如您已经观察到的那样,您可以通过从所有m中减去常量值n来实现。

为避免溢出,请勿选择固定的m,例如m = - 300。相反,请选择m作为所有n的最大值。那么每个归一化的指数值最多为1,因此归一化的和最多只是指数的数量,这应该相当小。