浮動小数点演算について、ANSI C 標準と IEEE 754 標準への適合性を有効にします。
Windows: [Optimization (最適化)] >
[Floating Point Precision Improvements (浮動小数点精度の改善)]
Linux: なし
Mac OS X: なし
IA-32 アーキテクチャー、インテル(R) 64 アーキテクチャー、IA-64 アーキテクチャー
Linux* および Mac OS* X: | なし |
Windows*: | /Op |
/Op- |
なし
オフ |
このオプションは、浮動小数点演算について、ANSI C 標準と IEEE 754 標準への適合性を有効にします。
このオプションを指定すると、宣言された水準の精度が保たれます。また、浮動小数点演算の処理は、ANSI および IEEE 標準にほぼ準拠する結果となります。浮動小数点演算による中間結果には、完全な 10 バイトの内部精度が維持されます。x87 浮動小数点レジスターのすべてのスピルおよびリロードは、この内部形式を使用して精度の低下を防ぎます。
このオプションは、ほとんどのプログラムのパフォーマンスに不利に働きます。目的のアプリケーションにこのオプションが必要かどうか不明な場合は、このオプションを指定した場合と指定しない場合で実際にプログラムをコンパイルし、実行して、パフォーマンスと精度に対する効果を評価してみてください。/Op の代わりに、/QxN (インテル(R) Pentium(R) 4 プロセッサー以降の場合) と /Qprec を使用できます。
/Op オプションを指定すると、プログラムのコンパイルに次の影響が生じます。
浮動小数点型として定義されたユーザー変数は、レジスターに割り当てられません。
IA-32 システムで、式がスピル (レジスターからメモリーへ移動) する場合、64 ビット (倍精度) ではなく、80 ビット (拡張精度) としてスピルされます。
浮動小数点演算の比較は、NaN (非数) の動作以外は IEEE 754 の仕様に準拠します。
演算は、コード内で指定したとおりに実行されます。例えば、除算が「逆数の乗算」に変更されることはありません。
コンパイラーは関連付けを変更せずに、指定した順序で浮動小数点演算を実行します。
浮動小数点値に対しては、定数の畳込みによる最適化は実行しません。定数の畳込みとは、1 を掛けたり、1 で割ったり、0 の足し引きをしたりといった計算を省くことです。定数の畳込みを実行しないので、例えば、0.0 の足し算についても記述したとおりに実行します。また、コンパイル時の浮動小数点演算も実行しません。これは、浮動小数点例外についてもその状態を変えないようにするためです。
浮動小数点演算は ANSI C に準拠します。float 型および double 型への代入を行うと、その精度は、80 ビット (拡張型) から 32 ビット (float) か 64 ビット (double) に丸められます。/Op を指定しないと、精度が丸められずに変数が再使用される場合もあります。
関数のインライン展開を無効にする /Oi- オプションを設定します。
浮動小数点演算のセマンティクスを制御する場合は、/fp オプションの使用を推奨します。
なし
fp-model、fp コンパイラー・オプション