分数のリストが 2 つあります。
いう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 の分子は数列に由来しません。この質問の目的のために、それらはランダムである可能性もあります。B のすべての分母と同様に、A のすべての値の分母が同じになるのに役立つ場合。
どんなアイデアでも大歓迎です!
( ps. 24 時間前に比率に関して同様の質問A'/B'
をしましたが、実際には間違った質問でした。実際には の後A'/(A'+B')
です。申し訳ありませんが、私の間違いです。)