web-dev-qa-db-ja.com

C ++数学ライブラリのpow()関数の時間計算量?

C++に組み込まれているpow()関数の最悪の場合の時間計算量を知りたいですか?

24
uda27

これは、基盤となるアーキテクチャによって異なります。最も一般的なデスクトップアーキテクチャであるx86では、これは定数時間の操作です。

X86に実装する方法の詳細については、この質問を参照してください: 方法:x86でpow(real、real)

13
Magnus Hoff

これが 1つの実装 です。見てください。確かに、これはかなり複雑なコードであり、19の特殊なケースがあります。時間計算量は、渡された値に依存しているようには見えません。

pow(x,y)の計算に使用されるメソッドの簡単な説明は次のとおりです。

_Method:  Let `x =  2 * (1+f)`
_
  • log2(x)を2つの部分で計算して返します:log2(x) = w1 + w2、ここで_w1_には_53-24 = 29_ビットの末尾のゼロがあります。

  • 多倍長演算をシミュレートしてy*log2(x) = n+y'を実行します。ここで、_|y'|<=0.5_です。

  • x**y = 2**n*exp(y'*log2)を返します

1
dasblinkenlight

現在使用しているシステム/アーキテクチャについては言及されていないため、推測に任せています。

ただし、詳細を探しているのではなく、自由に利用できる実装のコードを参照したい場合Seehttp://www.netlib.org/fdlibm/ 、具体的には http://www.netlib.org/fdlibm/w_pow.c

詳細については、この質問の回答を参照してください: https://stackoverflow.com/a/2285277/25882

1
Chris Andrews