Не совсем ответ, но возможная подсказка.
Числа, хранящиеся в «форме журнала», можно умножать или делить, просто добавляя или вычитая числа. Например, exp(log(a) + log(b))
совпадает с a * b
. Или, используя a = 41, b = 101, это будет exp(3.71357 + 4.61512)
, что составляет exp(8.32869)
или 4140.98930
. Очевидно, что точность играет роль, и я укоротил цифры до 5 цифр. 41 * 101
это 4141
.
Я не проработал ваш пример кода, и для меня не сразу понятно, почему ваш код работает так, как он работает, но, надеюсь, вышеизложенное поможет вам собрать его воедино.
РЕДАКТИРОВАТЬ: Я набрал некоторые цифры в вашем примере кода. Если a = 41 и b = 101, а log_a = 3.71357 и log_b = 4.61512, то ваш пример кода вычисляет 4.95582
, а exp(4.95582)
равно 142.0
. «Более простой» способ получить тот же результат - log(exp(log_a) + exp(log_b))
, но, как уже отмечали другие, этот способ включает в себя три дорогих трансцендентных функции, тогда как ваш пример кода требует только две (плюс тривиальное сравнение).