我有两个分数列表;
说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' 中的哪个更大
IEmax( 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 小时前就该比率提出了类似的问题A'/B'
,但这实际上是一个错误的问题。我实际上是在追问A'/(A'+B')
。对不起,我的错误。)