[質問をより「有用」で明確になるようにグローバルに編集しました]
exp
cmathでの関数の実装の複雑さについて疑問に思いました。
複雑さとは、可能であればアルゴリズムの複雑さを意味します。それ以外の場合、浮動小数点演算と比較したコスト(たとえば追加)
次の行:
double x = 3;
double y = std::exp(x);
コンパイル先:
...
19,23d16
movq %rax, -40(%rbp)
movsd -40(%rbp), %xmm0
call exp
movsd %xmm0, -40(%rbp)
movq -40(%rbp), %rax
...
exp
実行時に動的にロードする必要がありますが、実装アルゴリズムの複雑さに関する多くの情報を見つけることができません。特別なプロセッサ命令への呼び出しはないようです(少なくともgccを使用するx86_64プラットフォームでは)ので、どこかに実装が見つからないはずです。私の考えでは、アルゴリズムは入力のバイナリ表現を使用して非常に複雑さが弱いと思われますが、このトピックに関する貴重なリファレンスを見つけることができませんでした。
この場合、アルゴリズムの複雑さについて話すことは実際には不可能であり、テストすることしかできません(以下の回答を参照)が、浮動小数点演算とexpの呼び出しの違いを客観的に定量化する方法がわかりません。