-mp オプションを指定すると、精度は宣言された水準が保たれます。また、浮動小数点演算の処理は、ANSI および IEEE 標準にほぼ準拠する結果となります。このオプションは、ほとんどのプログラムのパフォーマンスに不利に働きます。目的のアプリケーションにこのオプションが必要かどうかよくわからない場合は、このオプションを指定した場合と指定しない場合で実際にプログラムをコンパイルし、実行して、パフォーマンスと精度に対する効果を評価してみてください。-mp オプションを指定すると、プログラムのコンパイルに次の影響が生じます:
浮動小数点の精度を高くするには、-mp1 オプションを使用します。-mp1 は、-mp よりも禁止される最適化処理が少なく、パフォーマンスに与える影響も小さくなります。
警告
デフォルトの精度制御方式または丸めモードを変更すると (例えば、-pc32 フラグの使用やユーザの介入によって)、いくつかの算術関数で返された結果に影響する場合があります。
long double 型のサイズを 80 ビットに変更するには、-long_double を使用します。コンパイラのデフォルトの long double 型は、サイズが double 型と同じ 64 ビットになっています。このオプションを使用すると、このオプションを使用しないでコンパイルした他のファイルと互換性のない部分やライブラリ・ルーチンへの呼び出し命令に整合しない部分がいくつか発生します。したがって、このオプションを指定してコンパイルするときは、long double 型の変数はファイル単体の中だけのローカル変数にすることをお勧めします。
-xK や -xW などを指定して最適化する場合、インテル® C++ コンパイラは浮動小数点の除算を、分母の逆数による乗算に変更します。計算速度を上げるため、例えば A/B を A×(1/B) として計算します。ただし、B が 2126 より大きい場合は 1/B の値が 0 になります。1/B の値を維持しなければならない場合は、-prec_div を使用して、浮動小数点の除算を乗算に変換する最適化処理を禁止してください。-prec_div を指定すると、精度は上がりますが、若干パフォーマンスが落ちます。
浮動小数点の仮数の精度を制御するには、-pcn オプションを使用します。浮動小数点アルゴリズムの中には、浮動小数点値の仮数部または小数部の精度に影響を受けやすいものがあります。例えば、除算や平方根の計算のように反復処理が多いものは、-pcn オプションを使用して精度を下げると計算が速くなる場合があります。n は次のいずれかの値に設定すると、仮数はそれぞれ示したビット数に丸められます。
n のデフォルト値は倍精度を示す 80 です。このオプションを指定すると、全面的な最適化を実行できます。このオプションで影響されるのは浮動小数点値の小数部だけなので、-Op オプションとは異なり、パフォーマンスに悪影響は与えません。指数の部分は影響を受けません。 -pcn オプションを指定すると、main() 関数がコンパイルされるときの浮動小数点の精度の制御方式が変わります。 -pcn を使用するプログラムはエントリポイントとして main() を使用しなければならず、main() を含むファイルは -pcn. を指定してコンパイルしなければなりません。
浮動小数点から整数への変換を必要とするコードのパフォーマンスを改善するには、-rcd オプションを使用します。これは、丸めモードの変更を制御して最適化を行います。デフォルトでは、浮動小数点の丸めモードは「最近値への丸め」となっています。つまり、各値は浮動小数点の計算中に丸められます。ただし、C 言語の場合は、整数への変換時に浮動小数点値を切り捨てる必要があります。これを行うには、コンパイラは、浮動小数点から整数へ変換する前に丸めモードを「切り捨て」方式に変更し、変換が終わったらまた元に戻すという処理をしなければなりません。-rcd オプションを指定すると、浮動小数点から整数への変換をはじめとして浮動小数点の計算すべてについて、丸めモードは「切り捨て」方式に変更できなくなります。このオプションを指定するとパフォーマンスは改善されるかもしれませんが、浮動小数点から整数への変換処理については C 言語のセマンティクスに適合しなくなります。
-fp_port オプションは、代入と型キャストの際に浮動小数点の結果を丸めます。速度に多少影響します。
関数呼び出しが浮動小数点値を返す場合、戻り値は FP スタックの一番上に配置されます。戻り値が未使用の場合、コンパイラは正しい状態で FP スタックを維持するためにスタックから値をポップします。 しかし、アプリケーションが関数のプロトタイプを省略するか、関数のプロトタイプを正しく行わない場合、戻り値はスタックに残されます。この結果、FP スタックが最終的にオーバーフローすることがあります。
一般に、FP スタックがオーバーフローすると、NaN 値が FP 計算で用いられるため、プログラムの結果は異なります。また、オーバーフロー・ポイントが実際の問題の箇所とは異なっていることもあります。 -fpchkstk オプションは、正しくない呼び出しが発生した直後に問題があるコードを知らせるので、これらの問題をより簡単に見つけることができます。