C++ 03 では、 eg を使用すると、 を使用std::pow(double_val, 6)
するよりもかなり高速std::pow(double_val, 6.0)
でした。
これは、C++11 でコンパイルする場合には当てはまりません。gcc の libstdc++-4.8 の cmath ヘッダーを見ると、明示的な pow(double, int) がもはや存在しないことがわかります。このケースは、int を double に昇格させる次のテンプレートによって処理されます。
template<typename _Tp, typename _Up>
inline typename __gnu_cxx::__promote_2<_Tp, _Up>::__type
pow(_Tp __x, _Up __y) {
typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type;
return std::pow(__type(__x), __type(__y));
}
これは C++11 標準の動作ですか、それとも将来の libstdc++ 実装がより高速な方法に戻る可能性がありますか?
第二に、標準または実装上の理由により、より高速な動作が不可能になった場合、それを再び達成するための最も移植性の高い方法は何ですか? power(...)
「ext/numeric」の下に gcc stdlibc++の関数が表示されますが、これは非標準のSGI(rip) 拡張機能としてマークされています。