浮動小数点オプション

浮動小数点オプションでは、浮動小数点データの扱い方を指定することができます。

「最適化オプション」も参照してください。

浮動小数点オプションの説明

-assume [no]minus0

デフォルト: -assume nominus0

プロセッサが -0.0 と +0.0 を判別でき、書式付き出力に -0.0 の値を負の符号で書き出すことができる場合、SIGN 組込み関数の IEEE* 浮動小数点値 -0.0 を扱う際に Fortran 95 の標準セマンティクスを使用するようコンパイラに指示します。

デフォルトは -assume nominus0 です。これは SIGN 組込み関数で Fortran 90/77 の標準セマンティクスを使用するようコンパイラに指示します。-0.0 と +0.0 は 0.0 として扱われ、-0.0 は負の符号なしで書式付き出力に書き出されます。

-[no]fltconsistency

デフォルト: -nofltconsistency

代替構文: -mp

計算中に浮動小数点の一貫性を向上できます。

-fltconsistency は、数値ライブラリ関数のインライン展開を無効にします。

このオプションで、最適化を制限し、宣言された精度を維持します。浮動小数点演算の順序変更はありません。また、各浮動小数点の結果は、次の計算に使用するために浮動小数点プロセッサで保持されずに、ターゲットの変数に格納されます。

例えば、コンパイラでは、分母の逆数によって浮動小数点数の除算計算を乗算に変えられます。ただし、これによって、浮動小数点数の除算計算の結果が多少変わることがあります。

-fltconsistency オプションが使用された場合 オプションが使用された場合、浮動小数点の中間結果は 10 バイトの内部精度が完全に保たれます。さらに、X87 浮動小数点レジスタのすべてのスピル/リロードは、制御できないスピル/リロードによって精度が変わらないように、内部フォーマットを使用して行われます。

このオプションは、デフォルトの浮動小数点最適化フラグを使用するとパフォーマンスの低下を引き起こします。この問題を回避するには、-mp1 オプションを使用します。-mp1 オプションは、パフォーマンスに影響をほとんど与えることなく、デフォルトの浮動小数点精度に近い精度を実現します。

デフォルト値の -nofltconsistency を使用すると、浮動小数点数結果の一貫性が多少損なわれますが、精度とランタイム・パフォーマンスが向上します。

このオプションを使用すると、実行速度が多少遅くなる場合があります。

『Vol II: アプリケーションの最適化』の「浮動小数点演算の精度の向上と制限」も参照してください。

-fp_port (IA-32 システムのみ)

デフォルト: オフ

浮動小数点演算の後に、浮動小数点の結果を丸めます。そのため、代入時と型変換時にユーザが宣言した精度に丸められます。速度に多少影響があります。

デフォルトでは、浮動小数点演算の結果を高精度で維持します。これにより、浮動小数点演算の結果の一貫性が多少損なわれますが、より良いパフォーマンスを得ることができます。

『Vol II: アプリケーションの最適化』の「IA-32 システムの浮動小数点演算の精度」も参照してください。

-[no]fpconstant

デフォルト: -nofpconstant

倍精度変数に代入された単精度定数を倍精度で評価するように要求します。

Fortran 標準では、定数を単精度で評価するように定めています。
FORTRAN-77 コンパイラ用に作成された一部のプログラムでは、倍精度変数に代入された単精度定数が倍精度で評価されることを前提としているために、浮動小数点演算の結果が変わることがあります。

次の例では、-fpconstant を指定すると、D1D2 に同じ値が代入されます。-fpconstant オプションを省略すると、コンパイラは標準に基づく動作を行い、D1 に精度の低い値を代入します。

REAL (KIND=8) D1, D2

DATA D1 /2.71828182846182/   !REAL (KIND=4) value expanded to double

DATA D2 /2.71828182846182D0/ !Double value assigned to double

-fpen

デフォルト: -fpe3

メイン・プログラムのランタイム時の浮動小数点例外処理を制御します。これには、例外浮動小数点値が許容されるかどうかや、ランタイム時例外がどの程度正確に報告されるかなどが含まれます。このオプションは、次の例外の処理方法を制御します:

次のオプションを選択できます。

IA-32 システムで -fpe0 オプションを使用するとランタイム時のパフォーマンスが低下します。

多くのプログラムでは、正規化されていない数値またはその他の例外値を処理する必要はありません。Itanium® ベース・システムで -fpe3 を使用するとランタイム時のパフォーマンスが低下します。

-fpstkchk (IA-32 システムのみ)

デフォルト: オフ

関数呼び出し後に余分なコードを生成し、浮動小数点 (FP) スタックを例外状態にします。

デフォルトでは、チェックは行われません。そのため、FP スタックにオーバーフローが発生すると、NaN 値が FP 計算に加えられ、プログラムの結果に違いが生じます。そのため、オーバーフロー・ポイントが実際のバグの場所からかなり離れていることもあります。-fpstkchk オプションは、不正な呼び出しが発生した直後にアクセス違反を行うコードを配置して、このような問題を見つけやすくします。

-fr32 (Itanium ベース・システムのみ)

デフォルト: オフ

高い精度を持つ浮動小数点レジスタの無効に指定します。

-ftz[-]

デフォルト: オフ (-ftz-)  

デノーマル結果を 0 にフラッシュします。このオプションは、メイン・プログラムをコンパイルするときのみ効果があります。

Itanium ベース・システムでは、-O3 オプションを使用すると -ftz オプションが自動的に設定されます。

-IPF_flt_eval_method0 (Itanium ベース・システムのみ)

デフォルト: オフ

プログラムで宣言された変数型により指定される精度での浮動小数点演算を含む式を評価するようにコンパイラに指示します。デフォルトでは、中間浮動小数点式は高い精度で保たれます。

『Vol II: アプリケーションの最適化』の「Itanium® ベースのシステムに使用する浮動小数点演算オプション」も参照してください。

-IPF_fltacc[-] (Itanium ベース・システムのみ)

デフォルト: オフ

浮動小数点の精度に影響を与える最適化を無効にします。

デフォルト設定 (-IPF_fltacc-) が使用された場合、コンパイラは浮動小数点の精度を低下する最適化を適用します。

浮動小数点の精度を高めるために -IPF_fltacc または -fltconsistency を使用するには、いくつかの最適化を無効にする必要があります。

『Vol II: アプリケーションの最適化』の「Itanium® ベースのシステムに使用する浮動小数点演算オプション」も参照してください。

-IPF_fma[-] (Itanium ベース・システムのみ)

デフォルト: オフ

浮動小数点積和/積差演算を 1 つの演算命令で行うことを有効にします。

-IPF_fp_relaxed[-] (Itanium ベース・システムのみ)

デフォルト: -IPF_fp_relaxed-

divide や sqrt のような数値演算関数で、より高速な、しかし多少精度が低いコード・シーケンスを使用します。厳密な IEEE* 精度と比較すると、このオプションはこれらの関数で行われる浮動小数点計算の精度を少し下げます (通常は最下位の桁に制限される)。

-IPF_fp_speculationmode (Itanium ベース・システムのみ)

デフォルト: -IPF_fp_speculationfast

次のいずれかのモードで、浮動小数点演算を有効にします。

『Vol II: アプリケーションの最適化』の「Itanium® ベースのシステムに使用する浮動小数点演算オプション」も参照してください。

-mp1

デフォルト: オフ

浮動小数点を宣言された精度にできるだけ準拠するように制限します。オプションは、速度に多少影響を与えますが、-mp の場合ほどではありません。

-pc{32|64|80} (IA-32 およびインテル® エクステンデッド・メモリ 64 テクノロジ (インテル® EM64T) システムのみ)

デフォルト: -pc64

浮動小数点の仮数部の精度を制御できるようにします。設定可能な値は以下のとおりです。