浮動小数点の一貫性を向上させます。
Windows: [Floating-Point (浮動小数点)] > [Floating-Point Consistency (浮動小数点の整合性)]
Linux: なし
Mac OS X: [Floating-Point (浮動小数点)] > [Improve Floating-point Consistency (浮動小数点演算の一貫性の向上)]
IA-32、インテル® 64、IA-64 アーキテクチャー
Linux および Mac OS X: |
-fltconsistency -nofltconsistency |
Windows: |
/fltconsistency /nofltconsistency |
なし
nofltconsistency |
浮動小数点の一貫性の向上を有効にしません。この設定では、浮動小数点数結果の一貫性が多少損なわれますが、精度とランタイム・パフォーマンスが向上します。 |
このオプションは、浮動小数点の一貫性を向上させます。実行速度が多少遅くなる場合があります。このオプションで、最適化を制限し、宣言された精度を維持します。また、算術ライブラリー関数のインライン展開を無効にします。
浮動小数点演算の順序変更はありません。また、各浮動小数点の結果は、次の計算に使用するために浮動小数点プロセッサーで保持されずに、ターゲットの変数に格納されます。
例えば、コンパイラーでは、分母の逆数によって浮動小数点数の除算計算を乗算に変えられます。ただし、これによって、浮動小数点数の除算計算の結果が多少変わることがあります。
浮動小数点演算による中間結果には、完全な 80 ビットの内部精度が維持されます。さらに、X87 浮動小数点レジスターのすべてのスピル/リロードは、制御できないスピル/リロードによって精度が変わらないように、内部フォーマットを使用して行われます。
このオプションを指定すると、プログラムのコンパイルに次の影響が生じます。
IA-32 およびインテル® 64 アーキテクチャー・ベースのシステムでは、浮動小数点ユーザー変数は、レジスターに割り当てられません。
IA-64 アーキテクチャー・ベースのシステムでは、浮動小数点ユーザー変数は、レジスターに割り当てられることがあります。式は、ソースオペランドの精度を使用して評価されます。コンパイラーは、積和/積差演算を 1 つの演算命令で実行する浮動小数点積和 (FMA) 命令を使用しません。これは、-fma オプション (Linux) または /Qfma オプション (Windows) を使用して有効にできます。コンパイラーは、コンピューターの浮動小数点演算の状態に影響を及ぼすような浮動小数点演算のスペキュレーションを行いません。
浮動小数点演算比較は、IEEE 754 に準拠します。
演算は、コード内で指定したとおりに実行されます。例えば、除算が「逆数の乗算」に変更されることはありません。
コンパイラーは関連付けを変更せずに、指定した順序で浮動小数点演算を実行します。
コンパイラーは浮動小数点値に対して定数保持を行いません。定数の畳込みとは、1 を掛けたり、1 で割ったり、0 の足し引きをしたりといった計算を省くことです。定数の畳込みを実行しないので、例えば、0.0 の足し算についても記述したとおりに実行します。また、コンパイル時の浮動小数点演算も実行しません。これは、浮動小数点例外についてもその状態を変えないようにするためです。
式がスピルする場合、64 ビット (DOUBLE PRECISION) ではなく、80 ビット (extended precision) としてスピルされます。REAL 型および DOUBLE PRECISION 型への代入を行うと、その精度は、80 ビットから 32 ビット (REAL) か 64 ビット (DOUBLE PRECISION) に丸められます。/Op を指定しなければ、精度が丸められずに変数が再使用される場合もあります。
-x オプション (Linux および Mac OS X) または /Qx オプション (Windows) によってベクトル化が有効になっている場合でも、コンパイラーはレダクション・ループ (ドット積を計算するループ) および精度型が混在しているループはベクトル化しません。同様に、コンパイラーは特定のループ変換を有効にしません。例えば、コンパイラーは、部分和またはループ交換を実行するためにレダクション・ループを変換しません。
このオプションは、デフォルトの浮動小数点最適化フラグを使用するとパフォーマンスの低下を引き起こします。
Windows システムでこの問題を回避するには、/Qprec オプションを使用します。このオプションは、パフォーマンスに影響をほとんど与えることなく、デフォルトの浮動小数点精度に近い精度を実現します。
浮動小数点演算のセマンティクスを制御する場合は、-fp-model (Linux および Mac OS X) または /fp (Windows) の使用を推奨します。