3

从概念上讲,我需要将每个事件的概率乘以巧合。由于可能涉及很多事件,我让计算机添加对数以避免下溢。

但是突然间我无法说服自己应该在开始添加之前将返回值初始化为零。我知道零是加法的单位元素,我记得我就是这样做的,但是,查看对数图,我可以清楚地看到零的反对数是负无穷大。

所以将返回值初始化为零应该相当于将我所有的概率乘以负无穷大,这绝对是不正确的。我究竟做错了什么?

4

3 回答 3

7

如果将值相乘,它们看起来像这样:

product = 1*p1*....*pn

如果你取两边的自然对数,它看起来像这样:

ln(product) = ln(1) + ln(p1) + .... + ln(pn)

但是ln(1) = 0,这就是初始化对数总和的方式。将其设置为零。

记住你在这里求和的内容:每个概率的对数加到总概率的对数中。完成总和后,您可以获得这样的产品:

product = exp(ln(product)) = exp(ln(sum of ln(pn))
于 2011-02-11T12:07:07.717 回答
6

零的反对数是一,而不是负无穷大。这意味着从零开始添加对数与从一开始乘以概率本身是相同的。

于 2011-02-11T12:05:45.510 回答
0

如果您正在计算事件的交集。只是将它们相乘。无需考虑对数空间。如果它变得非常小,那么事件交集的概率为零。

于 2011-02-11T12:08:42.143 回答