C++に組み込まれているpow()関数の最悪の場合の時間計算量を知りたいですか?
これは、基盤となるアーキテクチャによって異なります。最も一般的なデスクトップアーキテクチャであるx86では、これは定数時間の操作です。
X86に実装する方法の詳細については、この質問を参照してください: 方法:x86でpow(real、real)
これが 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)
を返します
現在使用しているシステム/アーキテクチャについては言及されていないため、推測に任せています。
ただし、詳細を探しているのではなく、自由に利用できる実装のコードを参照したい場合Seehttp://www.netlib.org/fdlibm/ 、具体的には http://www.netlib.org/fdlibm/w_pow.c
詳細については、この質問の回答を参照してください: https://stackoverflow.com/a/2285277/25882