通过添加对数进行乘法运算---身份元素是零吗?

Wan*_*ang 3 math underflow

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

但突然之间我无法说服自己在开始添加之前将返回值初始化为零.我知道零是加法的标识元素,我记得这就是我的方法,但是,看一下对数图,我可以清楚地看到零的反对数是负无穷大.

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

duf*_*ymo 7

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

product = 1*p1*....*pn
Run Code Online (Sandbox Code Playgroud)

如果你采用双方的自然对数,它看起来像这样:

ln(product) = ln(1) + ln(p1) + .... + ln(pn)
Run Code Online (Sandbox Code Playgroud)

但是ln(1) = 0,这就是你如何初始化对数之和.将其设置为零.

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

product = exp(ln(product)) = exp(ln(sum of ln(pn))
Run Code Online (Sandbox Code Playgroud)

  • 我认为补救读者也可能会欣赏其他方面. (2认同)

Mic*_*ber 6

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

  • @duffymo - 你的答案是对的,但这个也是如此.事实上他们说同样的话. (3认同)