У меня есть два списка фракций;
скажи 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' больше
ie max( log(a[0])+log(a[1])+..., log(b[0])+log(b[1])+... )
но мне нужно реальное соотношение....
Мой лучший выбор на сегодняшний день - сохранить представление чисел в виде дробей, то есть A = [ [1,212], [5,212], [3,212], ... ]
, и реализовать мою собственную арифметику, но она становится неуклюжей, и у меня есть ощущение, что есть (простой) способ логарифмов, который я просто отсутствует....
Числители для A и B не берутся из последовательности. Они также могут быть случайными для целей этого вопроса. Если это поможет, знаменатели для всех значений в A будут одинаковыми, как и все знаменатели для B.
Приветствуются любые идеи!
Мат