、私がしている場合:2*0.025
取得が毎回2つの定数の積は、実行されるたびに計算されますか?例えば
if(x < 2*0.025) { ... }
計算していますか?または、0.05
は、乗算演算が毎回実行される必要がないように置換されますか?
つまり、2*0.025
の代わりに0.05
を使用すると効率的ですか?
、私がしている場合:2*0.025
取得が毎回2つの定数の積は、実行されるたびに計算されますか?例えば
if(x < 2*0.025) { ... }
計算していますか?または、0.05
は、乗算演算が毎回実行される必要がないように置換されますか?
つまり、2*0.025
の代わりに0.05
を使用すると効率的ですか?
私が知っているすべてのコンパイラはconstant foldingを実装しています。つまり、コンパイル時に定数式を計算するため、違いはありません。しかし、標準はそれを強制するものではありません。
定数式は、実行時ではなく変換中に評価される可能性があり、したがって定数がある場所で使用できます。
この最適化を一部のコンパイラで明示的に無効にすることができます。たとえば、-frounding-math
は、gccの浮動小数点式の定数フォールディングを無効にします。
定数式はあらかじめ計算されています。