Я пытаюсь вычислить логарифм среднего некоторых очень маленьких значений. Для текущего набора данных крайние точки:
log_a=-1.6430e+03;
log_b=-3.8278e+03;
Таким образом, в действительности я хочу вычислить (a+b) / 2
или log((a+b)/2)
, поскольку я знаю, что (a+b)/2
слишком мал, чтобы хранить его как двойное число.
Я рассмотрел попытку дополнить все константой, чтобы вместо хранения log_a
я бы сохранил log_a+c
, но кажется, что a
и b
достаточно далеко друг от друга, чтобы дополнить log_b
достаточно, чтобы сделать exp(log_b+c)
вычислимым, я бы в итоге сделал exp(log_a+c)
слишком большим.
Я упускаю какой-то очевидный способ сделать это вычисление? Насколько я знаю, MATLAB не позволит мне использовать ничего, кроме двойной точности, поэтому я озадачен тем, как я могу сделать это простое вычисление.
РЕДАКТИРОВАТЬ: Чтобы уточнить: я могу вычислить точный ответ для этих конкретных значений. Для других запусков алгоритма значения будут другими и могут быть ближе друг к другу. До сих пор было несколько хороших предложений для приближений; если точное решение не представляется возможным, есть ли другие приближения для более общих чисел / величин значений?