我有两个分数列表;使用logarthms进行算术以避免数值下溢的问题
说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'
值,
我的麻烦是在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的分母都是一样的。
任何想法都是最受欢迎的!
垫
太棒了!这应该很好。我看不到树林里的树林。 – 2010-02-18 10:40:34
很好的答案。你击败了我:) – 2010-02-18 10:42:46