2016-11-09 59 views
0

我正在爲任意精度算術編程庫。我面臨的最後一個問題是功能函數。我計算出計算2^(y log2(x))而不是x^y,並且仍然存在一個子問題:如何有效計算2^xx的範圍爲(0,1)(零和一個除外)。2^x的數值近似

由於無論如何我明顯存儲了理由,因此x的格式爲p/qp < q)。因此我可以計算出2(維基百科的第n個根算法https://en.wikipedia.org/wiki/Nth_root_algorithm)的q第-1個根,然後通過p對結果取冪。

但是,這看起來效率很低。有沒有優越的算法?謝謝你的幫助。

+1

如果你仔細想想,你會發現爲什麼自然對數被稱爲自然。把所有的東西都放在2上是沒有什麼意義的。'exp(y * ln(x))'具有更少的常量。 - 研究[bc libmath](http://www.rkeene.org/viewer/devel/old/bc-dos/bc/libmath.b.htm),證明這些功能得到了驗證。 – LutzL

+0

有關基礎知識的更多高級內容,請參見[通過對負指數進行平方運算](http://stackoverflow.com/a/30962495/2521214),然後查看更多高級內容的子鏈接,特別是'固定點數bumpum pow' – Spektre

回答

2

由於2^x = e^(x ln 2)e^x = 1 + x + x^2/2! + x^3/3! + ...這可能是一種方法。 e^x的系列擴展迅速收斂爲有限的x(如您的情況)。

+0

如果x仍然對於系列的快速收斂大,身份e^x =(e ^(x/2))^ 2可以使用幾次。 – Henry

+0

O(n)這個泰勒級數的收斂性。您需要很多條件來實現雙精度精度。 – duffymo

+0

@duffymo對於x = ln 2 = 0.69 ...(OP所要求的最大值)和雙精度,因爲'x^16/16!所需的最後一項是'x^15/15! = 1.3..E-16 <1/2^52'。 – coproc