<math.h>
обеспечивает более точный метод для вычисления log(1+x)
для double
с.
Существует ли такой же точный способ для вычисления log(1-x)
?
Причина, по которой я спрашиваю, заключается в том, что я пытаюсь выполнить некоторую работу в пространстве журнала для большей точности (в основном я умножаю и суммирую числа, очень близкие к нулю).Мне было легко написать функцию, которая выдает log( exp(log_of_a) + exp(log_of_b) ) = log( a + b )
с помощью log1p
.Я пытаюсь сделать подобную функцию для разницы:
log( exp(log_of_a) - exp(log_of_b) ) = log( a - b )
, где a > b
, конечно.
По существу, до тех пор, пока ни log_a
или log_b
== -inf
, функция должна просто возвращать:
return log( 1 - exp(log_b-log_a) ) + log_a;
В моей функции log_add
я получаю log( 1 + ... )
, поэтому я использую log1p
.Но здесь у меня есть log( 1 - ... )
.На всякий случай я даже прогуглил log1m, но не повезло ...
Когда аргумент x
находится в диапазоне [-inf, 1)
, тогда я мог бы просто использовать log1p(-x)
(учитывая мое утверждение a > b
).
Это лучший способ решить эту проблему?Я чувствую, что должен выполнять работу, которая была выполнена раньше ...
Я был бы очень признателен за вашу помощь, зная, как получить наиболее точные результаты, которые я могу (или объясняя, почему я не могу получить результаты более точныечем это).