2010-09-23 63 views
4

我正在尋找一種算法來計算LN(1-X)。 x通常很小(< 0.01),但偶爾可能會更大。算法需要準確,不要太慢。我寧願不使用ln(x)庫,因爲我可能會失去準確性。用於計算小(有時大)LN(1-X)良好的算法X

+0

錯誤的程度是多少? 「x」有多大? – 2010-09-23 09:12:32

+0

準確性非常重要,這是我不想使用庫的原因,因爲通過log(1.0-x)我立即失去了準確性。但算法不應該比使用log(1.0-x)慢幾個數量級。最後,在某些情況下,x可能接近於1.0,但我當然可以在單獨的算法中處理它們。 – willem 2010-09-23 09:18:38

+0

許多圖書館都有專門的功能,請參閱我編輯的答案。 – 2010-09-23 09:42:44

回答

3

根據你想要的精確度,-x是一個很好的近似小ln(1-x)。從here

編輯:如果需要算法的原因是獲得最佳精度,則有許多是專門爲log(1+x)庫。例如,在Python中使用log1p。同上CC++

+0

您提供的鏈接不包含算法。我發現一個使用log1p作爲搜索詞:http://golang.org/src/pkg/math/log1p.go做,但有浮動精度 – willem 2010-09-24 07:26:15

+0

他們不包括算法,但每一個編程語言,我知道的可以以某種方式使用C庫。另外,你發現的例子有'float64'精度,這是IEEE雙精度。你能告訴我們你可接受的錯誤是什麼,以及爲什麼你不想使用可用的庫?根據你的需要,這裏有人可能會提供幫助。 – 2010-09-24 07:48:28

+0

啊,我知道float64是相似/相等於double的。那麼算法可能就足夠了。我的允許誤差是10^{ - 9}的相對誤差。 – willem 2010-10-08 07:57:15

0

如果使用MATLAB的log1p()函數是專門爲對於x的小值來計算LN(1 + x)的設計。

+1

問題中沒有什麼說他們使用MATLAB,所以你的答案是沒有用的。 – Tony 2014-09-27 22:41:35