浮動小数点演算のセマンティクスを制御します。
Windows: なし
Linux: [Floating point (浮動小数点)] > [Floating Point Model (浮動小数点モデル)]
Mac OS: [Floating point (浮動小数点)] > [Floating Point Model (浮動小数点モデル)]
IA-32、インテル(R) EM64T、インテル(R) Itanium(R) アーキテクチャー
Linux* および Mac OS*: | -fp-model keyword |
Windows*: | /fp:keyword |
keyword | 使用するセマンティクスを指定します。設定可能な値は以下のとおりです。 | |
precise | 浮動小数点データで精度に影響しない最適化を有効にします。 | |
fast[=1|2] | 浮動小数点データにより強力な最適化を有効にします。 | |
strict | precise と except を有効にし、縮約を無効にし、プラグマ stdc fenv_accessを有効にします。 | |
source | 中間結果をソースで定義された精度に丸め、精度に影響しない最適化を有効にします。 | |
double | 中間結果を 53 ビット (double) 精度まで丸め、精度に影響しない最適化を有効にします。 | |
extended | 中間結果を 64 ビット (extended) 精度まで丸め、精度に影響しない最適化を有効にします。 | |
[no-]except
(Linux および Mac OS) または except[-] (Windows) |
浮動小数点例外セマンティクスを使用するかどうかを決定します。 |
-fp-model fast=1
または /fp:fast=1 |
コンパイラーは浮動小数点演算に、より強力な最適化を有効にします。ただし、-O0 (Linux および Mac OS) または /Od (Windows) を指定した場合、デフォルトは -mp (Linux および Mac OS) または /Op (Windows) です。 |
浮動小数点演算のセマンティクスを制御します。
keyword は次のグループに分けられます。
グループ A: source、double、 extended、 precise、fast、strict
グループ B: except (または - 形式)
複数の keyword を使用できます。ただし、次の規則が適用されます。
同じコンパイル処理で fast と except を一緒に指定することはできません。その他のグループ A と B の組み合わせを指定できます。
fast はデフォルトなので、グループ A の keyword
を指定せずに except を指定してはなりません。
グループ A からは 1 つの keyword のみを指定します。複数の keyword をグループ A から指定すると、最後 (右端) の keyword だけが有効になります。
複数回、except を指定した場合は、最後 (右端) の except だけが有効になります。
オプション | 説明 | ||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
-fp-model precise または /fp:precise | 浮動小数点の演算時に、厳密に精度に影響しない最適化を行うようコンパイラーに指示します。浮動小数点演算の結果を変更してしまう最適化は無効になります。ANSI
規格に厳密に準拠していなければなりません。これらのセマンティクスは、浮動小数点演算の精度を保証しますが、パフォーマンスを低下させる可能性があります。
コンパイラーはデフォルトの浮動小数点環境を想定します。変更はできません。 中間結果は、次の表で示される精度によって計算されます。
浮動小数点セマンティクスはデフォルトで無効です。これらのセマンティクスを有効にするには、-fp-model except または /fp:except を指定しなければなりません。 ソースコードで浮動小数点演算の解釈に適用されるセマンティクスについての情報は、例の precise を参照してください。 | ||||||||||||||||
-fp-model fast[=1|2] または /fp:fast[=1|2] | 浮動小数点の演算時に、より強力な最適化を行うようコンパイラーに指示します。これらの最適化で速度は向上しますが、浮動小数点演算の精度を変更してしまう可能性があります。
fast を指定することは fast=1 を指定するのと同じです。fast=2 を指定するとより早く結果を生成できますが、精度が落ちます。 浮動小数点例外セマンティクスはデフォルトでは無効です。同じコンパイル処理で fast と except を一緒に指定できないため、有効にすることはできません。例外セマンティクスを有効にするには、別の keyword (詳細は、他の keyword の説明を参照してください) を明示的に指定する必要があります。 ソースコードで浮動小数点演算の解釈に適用されるセマンティクスについての情報は、例の fast を参照してください。 | ||||||||||||||||
-fp-model strict または /fp:strict | 浮動小数点の演算時に、厳密に精度に影響しない最適化を行うようコンパイラーに指示し、浮動小数点例外セマンティクスを有効にします。これは最も厳密な浮動小数点モデルです。
コンパイラーはデフォルトの浮動小数点環境を想定しません。変更することが可能です。 浮動小数点例外セマンティクスは、明示的に -fp-model no-except または /fp:except- を指定することで無効にできます。 ソースコードで浮動小数点演算の解釈に適用されるセマンティクスについての情報は、例の strict を参照してください。 | ||||||||||||||||
-fp-model source または /fp:source | このオプションは keyword precise に似ていますが、
中間結果がソースコードで定義された精度に丸められる点は異なります。 中間式では、より高い精度のオペランドのソースが使用されます (該当する場合)。
コンパイラーはデフォルトの浮動小数点環境を想定します。変更はできません。 ソースコードで浮動小数点演算の解釈に適用されるセマンティクスについての情報は、例の source を参照してください。 | ||||||||||||||||
-fp-model double または /fp:double | このオプションは、keyword precise
と同じですが、中間結果は次のように丸められます。
コンパイラーはデフォルトの浮動小数点環境を想定します。変更はできません。 ソースコードで浮動小数点演算の解釈に適用されるセマンティクスについての情報は、例の double を参照してください。 | ||||||||||||||||
-fp-model extended または /fp:extended | このオプションは、keyword precise
と同じですが、中間結果は次のように丸められます。
コンパイラーはデフォルトの浮動小数点環境を想定します。変更はできません。 ソースコードで浮動小数点演算の解釈に適用されるセマンティクスについての情報は、例の extended を参照してください。 | ||||||||||||||||
-fp-model except または /fp:except | 浮動小数点例外セマンティクスを使用するようコンパイラーに指示します。 |
なし
ここで示す例の項目は次のとおりです。
次の keyword の例を示します。
ソースコード例:
float t0, t1, t2;
...
t0 = 4.0f + 0.1f + t1 + t2;
このオプションが指定されると、コンパイラーは次のセマンティクスを適用します。
加算は任意の順序で行われます。
中間式は、単精度、倍精度または拡張倍 精度を使用します。
定数の追加により、デフォルトの丸めモードを想定して、事前計算される可能性があります。
次の例は、これらのセマンティクスを使用して、コンパイラーがオリジナルのコードを解釈する方法を示しています。
float t0, t1, t2;
...
t0 = (float)((double)t1 + (double)t2) + 4.1f;
float t0, t1, t2;
...
t0 = (t1 + t2) + 4.1f;
float t0, t1, t2;
...
t0 = (t1 + 4.1f) + t2;
-fp-model
extended または /fp:extended
この設定は、IA-32 の Linux システムの -fp-model precise、インテル
Itanium システムの fp-model precise または /fp:precise
に相当します。
ソースコード例:
float t0, t1, t2;
...
t0 = 4.0f + 0.1f + t1 + t2;
このオプションが指定されると、コンパイラーは次のセマンティクスを適用します。
プログラムの順序で加算が行われます。
中間式は、拡張倍精度を使用します。
定数の追加により、デフォルトの丸めモードを想定して、事前計算される可能性があります。
次の例は、これらのセマンティクスを使用して、コンパイラーがオリジナルのコードを解釈する方法を示しています。
float t0, t1, t2;
...
t0 = (float)(((long double)4.1f + (long double)t1) + (long double)t2);
-fp-model source
または /fp:source
この設定は、インテル EM64T 対応システムの -fp-model
precise または /fp:precise に相当します。
ソースコード例:
float t0, t1, t2;
...
t0 = 4.0f + 0.1f + t1 + t2;
このオプションが指定されると、コンパイラーは次のセマンティクスを適用します。
プログラムの順序で加算が実行されます。括弧を考慮に入れます。
中間式は、ソースコードで指定された精度を使用します。
定数の追加により、デフォルトの丸めモードを想定して、事前計算される可能性があります。
次の例は、これらのセマンティクスを使用して、コンパイラーがオリジナルのコードを解釈する方法を示しています。
float t0, t1, t2;
...
t0 = ((4.1f + t1) + t2);
-fp-model
double または /fp:double
この設定は、IA-32 の Windows システムの -fp-model precise または
/fp:precise に相当します。
ソースコード例:
float t0, t1, t2;
...
t0 = 4.0f + 0.1f + t1 + t2;
このオプションが指定されると、コンパイラーは次のセマンティクスを適用します。
プログラムの順序で加算が行われます。
中間式は、倍精度を使用します。
定数の追加により、デフォルトの丸めモードを想定して、事前計算される可能性があります。
次の例は、これらのセマンティクスを使用して、コンパイラーがオリジナルのコードを解釈する方法を示しています。
float t0, t1, t2;
...
t0 = (float)(((double)4.1f + (double)t1) + (double)t2);
-fp-model strict または /fp:strict
ソースコード例:
float t0, t1, t2;
...
t0 = 4.0f + 0.1f + t1 + t2;
このオプションが指定されると、コンパイラーは次のセマンティクスを適用します。
プログラムの順序で加算が実行されます。括弧を考慮に入れます。
式評価では、keyword precise での式評価と一致します。
プログラム実行時にどの丸めモードがアクティブかを指示する方法がないため、定数の追加は、事前計算されません。
次の例は、これらのセマンティクスを使用して、コンパイラーがオリジナルのコードを解釈する方法を示しています。
float t0, t1, t2;
...
t0 = (float)((((long double)4.0f + (long double)0.1f) +
(long
double)t1) + (long double)t2);
mp コンパイラー・オプション
Op コンパイラー・オプション
mp1、Qprec コンパイラー・オプション
MSDN が提供する記事 『Microsoft Visual C++ Floating-Point Optimization』 では、このオプションの概念が説明されています。