<math.h>
double
秒間log(1+x)
を計算するためのより正確な方法を提供します。log(1-x)は?log1pとなるため、log(1 + x)はlog1pになります。
log(1-x)
を計算するための同様に正確な方法はありますか?
私は(私は主に掛けるとゼロに非常に近い数字を合計しています)より高い精度のログ・スペースでいくつかの作業をやろうとしているので、私が尋ねる理由があります。 log1p
を使ってlog(exp(log_of_a) + exp(log_of_b)) = log(a + b)
という関数を書くのが簡単だとわかりました。私はその違いのために同様の機能を作ろうとしています:
log(exp(log_of_a) - exp(log_of_b)) = log(a - b)
ここでは、もちろんa > b
です。
基本的に、限りlog_a
またはlog_b
== -inf
もないとして、関数は単純に返す必要があります:私のlog_add
機能で
return log(1 - exp(log_b-log_a)) + log_a;
を、私はlog(1 + ...)
で終わる、と私はlog1p
を使用しています。しかしここに私はlog(1 - ...)
を持っています。念のため、私もlog1mをグーグルが、引数x
が範囲[-inf, 1)
である
ときに運...、私は単純に(私の主張a > b
与えられた)log1p(-x)
を使用することができませんでした。
は、これを解決について移動すること最善の方法ですか?私は本当に私ができる最も正確な結果を取得する方法を知っているあなたの助けをいただければと思います前に行われている作業...
をやって(または私はこれ以上の結果は、より正確に得ることができない理由を説明しなければならないと感じ)。
は - 右、'ログ(B)=?あなたは 'a + b'を持っています。 – Gabe
+1おっと!良いキャッチ。遅いです... – user
浮動小数点数の否定は正確です。したがって、 'log1p(-x)'は 'log1p(x)'と同じくらい正確です。 –