入力に依存する0または非ゼロ(テンプレート引数、コンパイル時に知られている)に依存する数式がある場合、オプティマイザは方程式を評価し、0または1と評価される式を最適化します。オプティマイザは、コンパイル時定数に基づいて数式を推論しますか?
例えば:0
ある
double x = y * Eval<type>::value;
Eval<type>::value
場合、x
は常に0
になります。
double x = exp(y * Eval<type>::value);
Eval<type>::value
が0
であれば、x
は常に1
になります。
x
を0
または1
と置き換えるか、実行時にこれらの計算を実行できますか?
EDIT -O3
結果として得られる
あなたがアセンブリに精通している場合、あなただけのことのアセンブリ出力を見ることができます。 – Mysticial
私は、コンパイル時に十分なトリッキー(SFINAEなど)でこれを強制することさえできると確信しています。 – Lalaland
このフォームの質問に与えられる真の正解は、「それは許されますが、必須ではありません」だけです。この場合、「コンパイラは、通常、浮動小数点計算で大量の代数最適化を行うことはできません。 – zwol