【发布时间】:2010-02-18 10:17:52
【问题描述】:
我有两个分数列表;
说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 和 B 都很长,每个值都很小,所以计算乘积会很快导致数值下溢......
我知道通过对数将乘积转化为和可以帮助我确定 A' 或 B' 中哪个更大
即max( log(a[0])+log(a[1])+..., log(b[0])+log(b[1])+... )
但我需要实际比例....
迄今为止,我最好的选择是将数字表示形式保留为分数,即A = [ [1,212], [5,212], [3,212], ... ] 并实现我自己的算术,但它变得笨拙,我觉得我只是缺少一种(简单的)对数方式。 ...
A 和 B 的分子不是来自序列。出于这个问题的目的,它们也可能是随机的。如果它有助于 A 中所有值的分母相同,那么 B 中的所有分母也相同。
欢迎提出任何想法!
垫子
【问题讨论】:
标签: logarithm numerical-methods