2012-03-28 194 views
7

<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_alog_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)。

難道是最好方式去解決這個問題?我覺得我必須做的工作已經完成...

我真的很感激你的幫助知道如何得到最準確的結果,我可以(或解釋爲什麼我不能得到比這更準確的結果)。

+1

我假設你是指'log(exp(log_of_a)-exp(log_of_b))= log(a-b)',對吧?你有'a + b'。 – Gabe 2012-03-28 05:43:34

+0

+1糟糕!接得好。它遲到了...... – user 2012-03-28 05:56:29

+11

浮點數的否定是確切的,所以'log1p(-x)'和'log1p(x)'一樣精確。 – 2012-03-28 06:18:37

回答

10

@Raymond Chen在現場:「浮點數的否定是準確的,所以log1p(-x)log1p(x)一樣準確。」只是把它變成一個真正的答案。

+0

所以我*是*超過這個... – user 2012-03-29 00:12:48

+2

log1p(-x)確實是一個很好的方法來做到這一點,但我認爲這個答案是誤導性的,它聽起來像是在做一個確切的陳述,但實際上並非如此。如果你認爲是這樣,請準確地說出你的意思是「同樣準確」,然後澄清從「浮點數的否定是準確的」到「log1p(-x)與log1p(x)一樣精確」的跳躍。 。 – 2015-06-28 06:29:49

相關問題