さまざまな浮動小数点オプションを指定する。これらのオプションは、浮動小数点の計算を高速化したり、より正確にしたりするための各種の技法を提供します。
.-:----------------. | .-nospnans-----. | | +-norsqrt------+ | | +-norrm--------+ | | +-nonans-------+ | | +-maf----------+ | | +-fold---------+ | | +-nofltint-----+ | V +-complexgcc---+ | >>- -qfloat--=----+-nocomplexgcc-+-+--------------------------->< +-fltint-------+ +-nofold-------+ +-nomaf--------+ +-nans---------+ +-rrm----------+ +-rsqrt--------+ '-spnans-------'
オプション選択については、以下の『注』セクションで説明します。 #pragma optionsも参照してください。
デフォルト設定以外の float サブオプションを使用すると、浮動小数点計算でさまざまな結果を作成することになります。特定のサブオプションに対する必要な条件をすべて満たしていない場合は、誤った計算結果になる場合があります。このため、IEEE 浮動小数点値に関する浮動小数点計算の経験があり、プログラムにエラーが混入する可能性を適切に評価することができる場合でなければ、このオプションを使用してはなりません。
以下の 1 つ以上の float サブオプションを指定できます。
complexgcc
nocomplexgcc_complex の受け渡しで、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浮動小数点定数式を、実行時ではなくコンパイル時に評価することを指定します。 maf
nomaf適切な箇所で浮動小数点乗算・加算命令を使用することによって、より高速でより正確に浮動小数点計算を行います。この結果は、コンパイル時に行われる類似の計算の結果または他のタイプのコンピューターでの結果と正確に同じにならない場合があります。負のゼロ結果が作成されることがあります。このオプションは、浮動小数点の中間結果の精度に影響を及ぼす場合があります。 nans
nonans追加の命令を生成して、実行時に単精度から倍精度に変換するときにシグナル型 NaN (Not-a-Number) を検出します。オプション nonans は、この変換を検出する必要がないことを指定します。 -qfloat=nans は、IEEE 754 規格に完全に準拠するために必要です。
-qflttrap または -qflttrap=invalid オプションとともに使用すると、コンパイラーは、オペランドのいずれかがシグナル型 NaN である場合に引き起こされる比較演算における無効演算例外を検出します。
rrm
norrm浮動小数点の最適化が、正および負の無限大への実行時丸めモードと非互換にならないようにします。浮動小数点の丸めモードが実行時に変更される可能性があること、または浮動小数点の丸めモードが実行時に最も近い値に丸める モードでないことをコンパイラーに通知します。 浮動小数点状況レジスターおよび制御レジスターを実行時に変更する場合は、 -qfloat=rrm を指定しなければなりません (例外トラッピングの初期化についても同様です)。
rsqrt
norsqrt平方根の逆数を計算して乗算することによって、平方根の結果による除法を含むコードのシーケンスを置換することができるかどうかを指定します。この置換を可能にすると、コードの実行が高速化されます。
- -O2 の場合、デフォルトは -qfloat=norsqrt です。
- -O3 の場合、デフォルトは -qfloat=rsqrt です。このデフォルトをオーバーライドするには、-qfloat=norsqrt を使用します。
- -qnostrict は、-qfloat=rsqrt を設定します。 (-qfloat=rsqrt は、 errno が sqrt 関数呼び出しの場合に設定されない ことを意味するので注意してください。)
- -qignerrno も指定しない限り、 -qfloat=rsqrt は無効です。
rsqrt がすでに指定してある場合は、最適化レベルを変更しても、rsqrt オプションの設定は変更されません。 -qstrict | -qnostrict オプションと -qfloat= オプション が矛盾する場合は、最後の設定が使用されます。
spnans
nospnans追加の命令を生成して、単精度から倍精度への変換時にシグナル型 NaN を検出します。オプション nospnans は、この変換を検出する必要がないことを指定します。
コンパイル時に定数浮動小数点式を評価し、乗算・加算命令を生成しないように myprogram.C をコンパイルするには、以下を入力します。
xlc++ myprogram.C -qfloat=fold:nomaf
関連参照