【问题标题】:Numerical problems of computing exponential numbers (from Gaussian PDFs)计算指数数的数值问题(来自高斯 PDF)
【发布时间】:2023-03-28 04:13:02
【问题描述】:

我有一个非常小的指数值列表(例如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)以防止下溢,但在其他情况下会导致上溢。

我该如何解决这个问题?

不知道有没有表达清楚,如有不妥或语法错误,请指正。 提前致谢。

【问题讨论】:

    标签: math precision gaussian exponential numerical-stability


    【解决方案1】:

    正如您已经观察到的,您可以通过从所有 n 中减去一个常数值 m 来做到这一点。

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

    【讨论】:

      猜你喜欢
      • 2017-03-07
      • 2015-11-13
      • 1970-01-01
      • 2019-06-15
      • 2016-11-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多