-qfloat

説明

さまざまな浮動小数点オプションを指定する。 これらのオプションは浮動小数点の計算を高速化したり、精度を上げるためのさまざまなストラテジーを提供します。

構文

構文図を読む構文図をスキップする                .-:----------------.
                | .-nospnans-----. |
                | +-norsqrt------+ |
                | +-norrm--------+ |
                | +-norelax------+ |
                | +-nonans-------+ |
                | +-maf----------+ |
                | +-nohsflt------+ |
                | +-fold---------+ |
                | +-nofltint-----+ |
                V +-complexgcc---+ |
>>- -qfloat--=----+-nocomplexgcc-+-+---------------------------><
                  +-fltint-------+
                  +-nofold-------+
                  +-hsflt--------+
                  +-nomaf--------+
                  +-nans---------+
                  +-relax--------+
                  +-rrm----------+
                  +-rsqrt--------+
                  '-spnans-------'
 

オプション選択については、以下の『』セクションで 説明します。 #pragma optionsも参照してください。

デフォルト設定ではなく float サブオプションを使用すると、浮動小数点の計算でさまざまな結果が作成される可能性があります。指定されたサブオプションに必要な条件がすべて満たされていないと、誤った計算結果が作成される可能性があります。こういった理由により、IEEE 浮動小数点値に関連した浮動小数点の計算の経験があり、プログラムにエラーが混入する可能性を適切に評価できる場合にのみ、このオプションを使用してください。

以下の 1 つ以上の float サブオプションを指定できます。

complexgcc
nocomplexgcc
複合タイプの値を戻す場合とパラメーターを渡す場合に GCC との互換性を使用可能にします。 デフォルトは、32 ビット・モードでコンパイルする場合が float=complexgccで、64 ビット・モードでコンパイルする場合がfloat=nocomplexgcc です。
fltint
nofltint
オーバーフローを検査しない高速のインライン・コードを使用することによって、 浮動小数点から整数への変換を高速化します。 デフォルトは float=nofltint であり、 浮動小数点から整数への変換を検査して、範囲外の値がないかどうか調べます。

このサブオプションは、最適化オプションとともにのみ使用するようにしてください。

  • -O2 が有効な場合、-qfloat=nofltint が暗黙の設定です。
  • -O3 以上が有効な場合、-qfloat=fltint が暗黙指定されます。

    -O3 オプションに小数点から整数への変換の範囲検査を組み込むには、 -qfloat=nofltint を指定します。

  • -qnostrict は、-qfloat=fltint を設定します。

fltint サブオプションが既に指定されている場合は、 最適化レベルを変更しても、fltint の設定は変更されません。

-qstrict | -qnostrict オプションと -qfloat= オプションが矛盾する場合は、最後の設定が使用されます。

fold
nofold
浮動小数点定数式を、実行時ではなくコンパイル時に評価することを指定します。
hsflt
nohsflt
注:
hsflt サブオプションは、浮動小数点計算の特性が既知である特定の アプリケーションのためのものです。 他のアプリケーション・プログラムをコンパイルするときにこのオプションを使用すると、警告なしで誤った結果が作成される可能性があります。 -qfloat=rndsngl-q64、または -qarch=ppc、 あるいは他の PPC ファミリー・アーキテクチャー設定を指定してこのオプションを使用すると、rs64b または それ以降のシステムで間違った結果が生成される可能性があります。

hsflt オプションは、保管の前および浮動小数点から整数への変換時に、 計算値を単精度に丸めるのではなく切り捨てることによって、計算を高速化します。 nohsflt サブオプションは、式の評価後に単精度式を丸め、 範囲外の値かどうかについて浮動小数点から整数への変換を検査することを指定します。

hsflt サブオプションは、 rndsnglnans、 および spnans サブオプションをオーバーライドします。

-qfloat=hsflt オプションは、 廃止された -qhsflt オプションに代わるものです。 新しいアプリケーションでは、-qfloat=hsflt を使用してください。

このオプションは、-qarch オプションが pwr、pwr2、pwrx、 pwr2s、または com (32 ビット・モードの場合) に設定されていない場合には ほとんど効果がありません。PPC ファミリー・アーキテクチャーでは、すべての単精度 (float) 演算が丸められます。 このオプションの影響を受けるのは、単精度 (float) への倍精度 (double) 式のキャストだけです。

maf
nomaf
適切な箇所で浮動小数点乗算・加算命令を使用することによって、 より高速でより正確に浮動小数点計算を行います。 この結果は、 コンパイル時に行われる類似の計算の結果または他のタイプのコンピューターでの結果と正確に同じにならない場合があります。 負のゼロの結果が作成される可能性があります。このオプションは、浮動小数点の中間結果の精度に影響を及ぼす場合があります。
nans
nonans
実行時に単精度から倍精度に変換しているときにシグナル NaN (Not-a-Number) を検出するよう追加の命令を生成します。 オプション nonans は、この変換を検出する必要がないことを指定します。 -qfloat=nans は、IEEE 754 標準に完全に準拠するために必要です。

-qflttrap または -qflttrap=invalid オプションとともに使用すると、コンパイラーはオペランドのいずれかがシグナル NaN である場合に引き起こされる比較演算における無効な演算例外を検出します。

relax
norelax
厳密な IEEE への規格合致を、速度を速めるために若干緩めます。これは一般に、右方のゼロに関連した加算や減算など、いくつかのささいな浮動小数点の算術演算を除去することによって行います。
rrm
norrm
ランタイムの正および負の無限大方向への丸めモードと非互換の浮動小数点の最適化を回避する。浮動小数点の丸めモードが実行時に変更される可能性があること、または浮動小数点の丸めモードが実行時に最近似値への モードでないことをコンパイラーに通知します。

浮動小数点状況レジスターおよび制御レジスターを実行時に変更する場合は、 -qfloat=rrm を指定しなければなりません (例外トラッピングの初期化についても同様です)。

rsqrt
norsqrt
平方根の逆数を計算して乗算することによって、 平方根の結果による除算を含むコードのシーケンスを置換することができるかどうかを指定します。 この置換を可能にすると、コードの実行が高速化されます。
  • -O2 の場合、デフォルトは -qfloat=norsqrt です。
  • -O3 の場合、デフォルトは -qfloat=rsqrt です。 このデフォルトをオーバーライドするには、-qfloat=norsqrt を使用します。
  • -qnostrict は、-qfloat=rsqrt を設定します。 (-qfloat=rsqrt は、errnosqrt 関数呼び出しに設定されない ことを意味するので注意してください。)
  • -qignerrno も指定しない限り、-qfloat=rsqrt は無効です。

rsqrt がすでに指定されている場合、最適化レベルを変更しても rsqrt オプションの設定は変更されません。 -qstrict | -qnostrict オプションと -qfloat= オプション が矛盾する場合は、最後の設定が使用されます。

spnans
nospnans
単精度から倍精度への変換でシグナル NaN を検出するための追加の命令を生成します。 オプション nospnans は、この変換を検出する必要がないことを指定します。

コンパイル時に定数浮動小数点式が評価され、乗算・加算命令が生成されないように myprogram.C をコンパイルするには、以下のように入力します。

xlc++ myprogram.C -qfloat=fold:nomaf

関連情報