我有两个分数列表;
说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' 中的哪个更大
IEmax( log(a[0])+log(a[1])+..., log(b[0])+log(b[1])+... )
但我需要实际比例....
迄今为止,我最好的选择是将数字表示形式保留为分数,即A = [ [1,212], [5,212], [3,212], ... ]
实现我自己的算术,但它变得笨拙,我觉得我只是缺少一种(简单的)对数方式......
A 和 B 的分子不是来自序列。出于这个问题的目的,它们也可能是随机的。如果它有助于 A 中所有值的分母相同,则 B 中的所有分母也相同。
欢迎任何想法!
垫