У меня есть два списка фракций;
скажем 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 не взяты из последовательности. С тем же успехом они могут быть случайными. Если это помогает, знаменатели для всех значений в A одинаковы, как и все знаменатели для B.
Любые идеи приветствуются!
(ps. Я задал аналогичный вопрос 24 часа назад относительно отношения A'/B'
, но на самом деле это был неправильный вопрос, который нужно задать. Я на самом деле после A'/(A'+B')
Извините, моя ошибка.