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