<math.h>
爲計算log(1+x)
提供了更準確的方法,用於double
s。log(1 + x)是log1p,因爲log(1-x)是?
有沒有類似的計算方法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
,函數會簡單的返回:
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
)。
難道是最好方式去解決這個問題?我覺得我必須做的工作已經完成...
我真的很感激你的幫助知道如何得到最準確的結果,我可以(或解釋爲什麼我不能得到比這更準確的結果)。
我假設你是指'log(exp(log_of_a)-exp(log_of_b))= log(a-b)',對吧?你有'a + b'。 – Gabe 2012-03-28 05:43:34
+1糟糕!接得好。它遲到了...... – user 2012-03-28 05:56:29
浮點數的否定是確切的,所以'log1p(-x)'和'log1p(x)'一樣精確。 – 2012-03-28 06:18:37