C 標準ライブラリsqrt
とに関してpow
は、答えはノーです。
まず、pow(x, .5f)
が の実装よりも高速である場合sqrt(x)
、sqrt の維持を担当するエンジニアは実装を に置き換えpow(x, .5f)
ます。
第 2 に、商用ライブラリでの sqrt の実装は、通常、そのタスクを実行するために特別に最適化されています。多くの場合、高性能ソフトウェアの作成に精通しており、プロセッサから最高のパフォーマンスを引き出すためにアセンブリ言語またはアセンブリ言語に近い言語で記述している人々によって最適化されています。
第 3 に、多くのプロセッサには、sqrt を実行したり、その計算を支援したりする命令があります。(通常、平方根の逆数の推定値を提供する指示と、その推定値を改善する指示があります。)
でも
リンクしたコード/あなたが尋ねた質問は、大まかに近似された をsqrt
使用して大まかな近似を試みることに関するものですpow
。
質問で言及されている pow 近似ルーチンの最終バージョンを C に変換し、 を計算したときの実行時間を測定しましたpow(3, .5)
。また、システム (Mac OS X 10.8) の pow と sqrt、およびここでの sqrt 近似の実行時間も測定しました(1 回の反復と、最後に引数を掛けて、逆数ではなく平方根を取得します)。
まず、計算結果: pow 近似は 1.72101 を返します。sqrt 近似は 1.73054 を返します。システム pow および sqrt によって返される正しい値は 1.73205 です。
MacPro4,1 で 64 ビット モードで実行すると、pow 近似に約 6 サイクル、システム pow に 29 サイクル、平方根近似に 10 サイクル、システム sqrt に 29 サイクルかかります。これらの時間には、引数を読み込んで結果を保存するためのオーバーヘッドが含まれる場合があります (私は揮発性変数を使用して、コンパイラーが最適化しないように強制し、それ以外の場合は無駄なループ反復を測定できるようにしました)。
(これらの時間は「実効スループット」であり、実際には、ある呼び出しが開始されてから別の呼び出しが開始されるまでの CPU サイクル数です。)