Todd Veldhuizen のメタプログラミング ガイドsin
の最後の例を見て、非常に感銘を受けました。この例では、trig 関数cos
はコンパイル時に事前に計算されます。正直なところ、これには驚かされました。私のように、ループ内でこれらの膨大な数を実行するコードを作成している場合、これはパフォーマンスの向上に大きな影響を与える可能性があります。
質問1
sin
しかし、実行時ツールとして利用できるもの (またはのような実際の数学ライブラリ関数を呼び出すcos
) と、コンパイル時の数学演算子としてのみ利用できるものとの間の境界線はどこにあるのか疑問に思いました。
Todd の例では、通常の算術演算のみを使用して三角関数を手動で計算する必要があります。
では、コンパイラはすべての通常の数学関数を実行できるが、*
+
-
/
それ以外は何もできないと想定してよいでしょうか?
質問2
sin
そのような場合、コンパイル時の結果とcos
整数の計算しか取得できませんよね? つまり、次のような結果をプリコンパイルすることはできませんよsin 45.5
ね?
または、テンプレートがパラメーターとして整数のみを受け入れることができる場合は、いくつかの整数を取り、クラスでそれらを作成して、float 値float
を渡して取得することができます。1
2
3
1.23
sin