2016-11-09 14 views
0

私は任意精度計算のためのライブラリをプログラミングしています。私が直面している最後の問題は、パワー関数です。私はx^yの代わりに2^(y log2(x))を計算しましたが、1つの副次問題が残っています。(0,1)(0と1は除外)のxで効率的に2^xを計算するにはどうすればいいですか?数値近似2^x

とにかく、私は明らかに収入を保存しているので、xの形式はp/qp < q)です。したがってのqルート(Wikipediaのn番目のルートアルゴリズムhttps://en.wikipedia.org/wiki/Nth_root_algorithm)を計算してから、累乗をpで累乗することができました。

しかし、これは非常に非効率的なようです。優れたアルゴリズムはありますか?ご協力いただきありがとうございます。

+1

自然対数が自然と呼ばれる理由がわかります。 '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)を参照してください。さらに高度なもののサブリンク特に固定点ビッグファーム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

'x = ln 2 = 0.69 ...'(OPによって要求された最大値)と倍精度の最後の項が 'x^16/16! = 1.3..E-16 <1/2^52 'である。 – coproc