fp-model、fp

浮動小数点演算のセマンティクスを制御します。これは C++ 固有のコンテンツです。DPC++ には適用されません。

構文

Linux*:

-fp-model keyword

macOS*:

-fp-model keyword

Windows*:

/fp:keyword

引数

keyword

使用するセマンティクスを指定します。設定可能な値は以下のとおりです。

precise

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

fast[=1|2]

浮動小数点データにより強力な最適化を有効にします。

現在、fast=1 と fast=2 の間に違いはありません。

consistent

デフォルトのヒューリスティックを使用して、異なる最適化レベルや同じアーキテクチャーの異なるプロセッサーの結果を決定します。

source

中間結果をソースで定義された精度まで丸めます。

double

中間結果を 53 ビット (double) 精度まで丸めます。

extended

中間結果を 64 ビット (extended) 精度まで丸めます。

[no-]except (Linux* および macOS*) または except[-] (Windows*)

厳密な浮動小数点例外セマンティクスを使用するかどうかを決定します。

デフォルト

-fp-model fast=1
または /fp:fast=1

浮動小数点の演算時に、より強力な最適化を行います。

-fp-model precise
または /fp:precise

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

説明

浮動小数点演算のセマンティクスを制御します。

keywords は次のグループに分けられます。

複数の keywords を指定できます。ただし、次の規則が適用されます。

浮動小数点 (FP) 環境とは、FP 機械語命令の動作を制御するレジスターの集合で、現在の FP の状態を指します。浮動小数点環境には、丸めモード制御、例外マスク、FTZ (Flush-to-Zero) 制御、例外ステータスフラグ、およびその他の浮動小数点関連の機能が含まれます。

オプション

説明

-fp-model precise または /fp:precise

浮動小数点の演算時に、厳密に精度に影響しない最適化を行うようにコンパイラーに指示します。浮動小数点演算の結果を変更してしまう最適化は無効になります。ANSI 規格に厳密に準拠していなければなりません。

これらのセマンティクスは、シリアルコードおよびコンパイラーによりベクトル化または自動並列化されたコードの浮動小数点演算の再現性 (結果の一貫性) を保証しますが、パフォーマンスを低下させる可能性があります。その他の並列コードの値の安全性や実行ごとの再現性は保証しません。

OpenMP* コードにおける浮動小数点リダクション操作の実行ごとの再現性は、KMP_DETERMINISTIC_REDUCTION 環境変数を使用してスレッド数を固定することで得られる可能性があります。この環境変数に関する詳細は、「サポートされる環境変数」を参照してください。

コンパイラーはデフォルトの浮動小数点環境を想定します。変更はできません。

中間結果は、グループ B の keyword で上書きされない限り、次の表で示される精度によって計算されます。

Windows*

Linux*

macOS*

IA-32 アーキテクチャー

倍精度

拡張精度

該当なし

インテル® 64 アーキテクチャー

ソース

ソース

ソース

浮動小数点セマンティクスはデフォルトで無効です。これらのセマンティクスを有効にするには、-fp-model except または /fp:except を指定しなければなりません。

-fp-model fast[=1|2] または /fp:fast[=1|2]

浮動小数点の演算時に、より強力な最適化を行うようにコンパイラーに指示します。これらの最適化で速度は向上しますが、浮動小数点演算の精度と再現性に影響する可能性があります。

現在、fast=1 と fast=2 の間に違いはありません。

浮動小数点例外セマンティクスはデフォルトでは無効です。同じコンパイル処理で fast と except を一緒に指定できないため、有効にすることはできません。例外セマンティクスを有効にするには、別の keyword (詳細は、ほかの keyword の説明を参照してください) を明示的に指定する必要があります。

例外セマンティクスを有効にするには、別の keyword (詳細は、ほかの keyword の説明を参照してください) を明示的に指定する必要があります。

-fp-model consistent または /fp:consistent

コンパイラーは、デフォルトのヒューリスティックを使用して、異なる最適化レベルや同じアーキテクチャーの異なるプロセッサーの結果を決定するコードを生成します。

詳細は、『インテル® コンパイラーの浮動小数点演算における結果の一貫性』 (https://www.isus.jp/products/c-compilers/consistency-of-floating-point-results/) を参照してください。

-fp-model strict または /fp:strict

浮動小数点の演算時に、厳密に精度に影響しない最適化を行うようにコンパイラーに指示し、浮動小数点例外セマンティクスを有効にします。これは最も厳密な浮動小数点モデルです。

コンパイラーはデフォルトの浮動小数点環境を想定しません。変更することが可能です。

浮動小数点例外セマンティクスは、明示的に -fp-model no-except または /fp:except- を指定することで無効にできます。

-fp-model source または /fp:source

このオプションは、中間結果をソースコードで定義された精度に丸めます。また、グループ A の keyword で上書きされない限り、precise の keyword を意味します。

中間式では、より高い精度のオペランドのソースが使用されます (該当する場合)。

long double

64 ビット精度

80 ビット・データ型

指数部 15 ビット

double

53 ビット精度

64 ビット・データ型

指数部 11 ビット。IA-32 アーキテクチャー・ベースの Windows* システムでは、x87 レジスターで値が保持される場合、指数部は 15 ビットです。

float

24 ビット精度

32 ビット・データ型

指数部 8 ビット

コンパイラーはデフォルトの浮動小数点環境を想定します。変更はできません。

-fp-model double または /fp:double

このオプションは、中間結果を次のように丸めます。

53 ビット (double) 精度

64 ビット・データ型

指数部 11 ビット。IA-32 アーキテクチャー・ベースの Windows* システムでは、x87 レジスターで値が保持される場合、指数部は 15 ビットです。

このオプションは、グループ A の keyword で上書きされない限り、precise の keyword を意味します。

コンパイラーはデフォルトの浮動小数点環境を想定します。変更はできません。

-fp-model extended または /fp:extended

このオプションは、中間結果を次のように丸めます。

64 ビット (extended) 精度

80 ビット・データ型

指数部 15 ビット

このオプションは、グループ A の keyword で上書きされない限り、precise の keyword を意味します。

コンパイラーはデフォルトの浮動小数点環境を想定します。変更はできません。

-fp-model except または /fp:except

厳密な浮動小数点例外セマンティクスを使用するようにコンパイラーに指示します。

次のオプションのいずれも指定されない場合 (次のオプションは ifort でのみ利用可能)、-fp-model オプションと /fp オプションは、数学ライブラリー関数の結果における相対誤差の最大限許容値 (max-error) を定義します。

-fp-model fast (および /fp:fast) オプションは -fimf-precision=medium (/Qimf-precision:medium) オプションを設定し、-fp-model precise (および /fp:precise) オプションは -fimf-precision=high (および /Qimf-precision:high) オプションを意味します。-fp-model fast=2 (および /fp:fast2) オプションは -fimf-precision=medium (および /Qimf-precision:medium) と -fimf-domain-exclusion=15 (および /Qimf-domain-exclusion=15) を設定します。

Microsoft* Visual Studio* で Visual C++* プロジェクトを作成する場合、デフォルトで /fp:precise オプションが設定されます。このオプションは、特定の最適化を無効にすることで、浮動小数点演算の一貫性を高める浮動小数点モデルを使用します。これにより、パフォーマンスが低下する可能性があります。一般的なデフォルトである /fp:fast オプションに戻すには、[Floating Point Model] プロジェクト・プロパティーの値を Fast に変更します。

性能は、使用法、構成、およびその他の要因によって異なります。詳細については、www.Intel.com/PerformanceIndex (英語) を参照してください。

注意事項の改訂 #20201201

IDE オプション

Visual Studio*: [Code Generation] > [Floating Point Model]

[Code Generation] > [Enable FloatingPoint Exceptions]

[Code Generation] > [Floating PointExpression Evaluation]

Eclipse*: [Floating point] > [Floating Point Model]

Xcode*: [Floating point] > [Floating Point Model]

[Floating point] > [Reliable floating-point exceptions model]

代替オプション

なし

関連情報