【发布时间】:2011-01-18 14:56:34
【问题描述】:
我有两个分数列表;
说A = [ 1/212, 5/212, 3/212, ... ]
和B = [ 4/143, 7/143, 2/143, ... ]。
如果我们定义A' = a[0] * a[1] * a[2] * ... 和B' = b[0] * b[1] * b[2] * ...
我想计算 A' 和 B' 的归一化值
即特别是A' / (A'+B')和B' / (A'+B')的值
我的问题是 A 和 B 都很长,每个值都很小,所以计算乘积会很快导致数值下溢......
我知道通过对数将乘积转化为和可以帮助我确定 A' 或 B' 中哪个更大
即max( log(a[0])+log(a[1])+..., log(b[0])+log(b[1])+... )
使用日志我可以计算出A' / B' 的值,但我该怎么做A' / A'+B'
迄今为止,我最好的选择是将数字表示保留为分数,即A = [ [1,212], [5,212], [3,212], ... ] 并实现我自己的算术,但它变得笨拙,我觉得我只是缺少一种(简单的)对数方式。 ...
A 和 B 的分子不是来自序列。出于这个问题的目的,它们也可能是随机的。如果它有助于 A 中所有值的分母相同,那么 B 中的所有分母也相同。
欢迎提出任何想法!
( ps。我在 24 小时前询问了 similar question 关于比率 A'/B' 的问题,但实际上是 错误 的问题。我实际上是在 A'/(A'+B') 之后。对不起,我的错误。)
【问题讨论】:
-
对不起,这是否意味着 A'/(A'+B') 和 B'/(A'+B')?是否缺少括号?
-
是的,谢谢,我已经更正了。
标签: logarithm numerical-methods