I wanted to know what is the worst case time-complexity of the pow() function that's built in c++?
3 に答える
それは、基礎となるアーキテクチャに依存します。最も一般的なデスクトップ アーキテクチャである x86 では、これは一定時間の操作です。
x86 での実装方法の詳細については、この質問を参照してください: How to: pow(real, real) in x86
これが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)
あなたが使用しているシステム/アーキテクチャについて言及していないため、推測のままです.
ただし、詳細を探しているのではなく、自由に利用できる実装のコードを閲覧したいだけの場合は、 http://www.netlib.org/fdlibm/、具体的にはhttp://www.netlib.org/fdlibm/w_powを参照してください。 .c
背景の詳細については、この質問の回答を参照してください: https://stackoverflow.com/a/2285277/25882