次のようなコードがあります。
inline int calc_something(double x) {
if (x > 0.0) {
// do something
return 1;
} else {
// do something else
return 0;
}
}
残念ながら、 flag を使用すると、/fp:fast
明らかcalc_something(0)==1
に間違ったコード パスを使用していることになります。これは、コード内の複数のポイントで異なるパラメーターを使用してメソッドを使用する場合にのみ発生するため、コンパイラ (Microsoft Visual Studio 2008、SP1) からの怪しい最適化が行われていると思います。
また、インターフェースを次のように変更すると、上記の問題はなくなります。
inline int calc_something(const double& x) {
しかし、なぜこれが奇妙な動作を修正するのかわかりません。誰でもこの動作を説明できますか? 何が起こっているのか理解できない場合は、/fp:fast
スイッチを削除する必要がありますが、これによりアプリケーションがかなり遅くなります。