exp()
より一般的な よりも速いかどうか疑問に思っていpow()
ました。JsPerf http://jsperf.com/pow-vs-expで高速ベンチマークを実行したところ、興味深い結果が得られました。
Math.exp(logBase * exponent); // fastest
Math.exp(Math.log(base) * exponent); // middle
Math.pow(base, exponent); // slowest
アーキテクチャや言語によって結果が大きく異なることは承知していますが、理論的な観点にも興味があります。pow(a, b)
として実装されているか、exp(log(a) * b)
または電力を「直接」(C++、C#、またはJavaScriptで)計算するより賢い方法があります。一部のアーキテクチャで exp、log、または pow の CPU 命令はありますか?
私の知る限り、exp()
とlog()
はテイラー級数を使用して計算され、計算にかなりのコストがかかります。これは、一定の権力基盤のために、このコードが
double logBase = log(123.456);
for (int i = 0; i < 1024; ++i) {
exp(logBase * 654.321);
}
これよりも優れています
for (int i = 0; i < 1024; ++i) {
pow(123.456, 654.321);
}
それは正しい仮定ですか?