浮動小数点演算の精度

IA-32、Itanium® ベース・システムに使用する各種オプション

-mp オプション

-mpオプションを指定すると、精度は宣言された水準が保たれます。また、浮動小数点演算の処理は、ANSIおよびIEEEのそれぞれ当該規格にほぼ準拠する結果となります。このオプションは、ほとんどのプログラムのパフォーマンスに不利に働きます。目的のアプリケーションにこのオプションが必要かどうかよくわからない場合は、このオプションを指定した場合と指定しない場合で実際にプログラムをコンパイルし、実行して、パフォーマンスと精度の両方に対する効果を評価してみてください。 -mp オプションを指定すると、プログラムのコンパイルに次の影響が生じます。

注: -nolib_inlineおよび-mpオプションは、-Xc (ANSI C 完全準拠)オプションを選択するとデフォルトで有効になります。

-mp1 オプション

浮動小数点の精度を高くするには、-mp1オプションを使用します。-mp1-mpに比べると、禁止される最適化処理が少なく、またパフォーマンスに与える影響も小さくなります。

IA-32 のみのオプション

注意

デフォルトの精度制御方式または丸めモードを変更すると(例えば、-pc32 フラグの使用やユーザの介入によって)、いくつかの算術関数で返された結果に影響する場合があります。

-long_double オプション

long double型のサイズを80ビットに変更するには、-long_doubleを使用します。インテル・コンパイラのデフォルトのlong double型は、サイズがdouble型と同じ64ビットになっています。このオプションを使用すると、このオプションを使用しないでコンパイルした他のファイルと互換性のない部分やライブラリ・ルーチンへの呼び出し命令に整合しない部分がいくつか発生します。したがって、このオプションを指定してコンパイルをするときは、long double型の変数はファイル単体の中だけのローカル変数にするのをお勧めします

-prec_div オプション

-xK-xWなどを指定して最適化する場合は、浮動小数点の除算が、分母の逆数による乗算に変更されます。計算速度を上げるため、例えばA÷BをA×(1/B)として計算します。ただし、Bが2126より大きい場合は1/Bの値が0になります。1/Bの値を維持しなければならない場合は、-prec_divを使って、浮動小数点の除算を乗算に変換する最適化処理を禁止してください。-prec_divを指定すると、精度は上がりますが、若干パフォーマンスが落ちます。

-pcn オプション

浮動小数点の仮数の精度を制御するには、-pcnオプションを使用します。浮動小数点アルゴリズムの中には、浮動小数点値の仮数部または小数部の精度に影響を受けやすいものがあります。例えば、除算や平方根の計算のように反復処理が多いものは、-pcnオプションを使用して精度を下げると計算が速くなる場合があります。n は次のいずれかの値に設定すると、仮数はそれぞれ示したビット数に丸められます。

nのデフォルト値は倍精度を示す「80」です。このオプションを指定すると、全面的な最適化を実行できます。このオプションで影響されるのは浮動小数点値の小数部だけなので、-Opオプションとは異なり、パフォーマンスに悪影響は与えません。指数の部分は影響を受けません。指数の部分は影響を受けません。-pcnオプションを指定すると、main()関数がコンパイルされるときの浮動小数点の精度の制御方式が変わります。-pcnを使用するプログラムは入口点としてmain() を使用しなければならず、またmain()を含むファイルは-pcnを指定してコンパイルしなければなりません。

-rcd オプション

浮動小数点から整数への変換を必要とするコードのパフォーマンスを改善するには、-rcdオプションを使用します。これは、丸めモードの変更を制御して最適化を行います。デフォルトでは、浮動小数点の丸めモードは「最近値への丸め」となっています。つまり、各値は浮動小数点の計算中に丸められます。ただし、C言語の場合は、整数への変換時に浮動小数点値を切り捨てる必要があります。これを行うには、コンパイラは、浮動小数点から整数へ変換する前に丸めモードを「切り捨て」方式に変更し、変換が終わったらまた元に戻すという処理をしなければなりません。-rcdオプションを指定すると、浮動小数点から整数への変換をはじめとして浮動小数点の計算すべてについて、丸めモードは「切り捨て」方式に変更できなくなります。このオプションを指定するとパフォーマンスは改善されるかもしれませんが、浮動小数点から整数への変換処理についてはC言語のセマンティクスに適合しなくなります。

-fp_port オプション

-fp_port オプションは、代入と型キャスト時に浮動小数点の結果を丸めます。これは、速度に影響する場合があります。