インテル® C++ コンパイラー 18.0 デベロッパー・ガイドおよびリファレンス
次のリストは、インテル® C++ コンパイラーがサポートする特殊値とその簡単な説明です。
ゼロの符号は、ゼロ以外の数値の符号と同じです。比較では +0 は -0 と等しいものとして扱われます。符号付きゼロは、特定の数値解析アルゴリズムで役立ちますが、ほとんどのアプリケーションではゼロの符号は処理されません。
正規化されていない数 (デノーマル) は、正規化された正と負の最小値の間のギャップを埋めます。そうしないと、その間には +/- 0 しか存在しないことになります。正規化されていない数は、漸次アンダーフロー (gradual underflow) を許容することで演算可能な範囲を拡張します。
IA-32 アーキテクチャー・ベース・システムは、正規化されていないオペランドの状態フラグをサポートします。このフラグが設定されると、浮動小数点演算への少なくとも 1 つの入力オペランドが正規化されていないことを意味します。アンダーフロー状態フラグは、数値の精度が失われ、非正規化されるときに設定されます。
無限大は、大きい絶対値を持つオペランドに限られたケースでの算術の結果です。これにより、オーバーフローが発生した際に処理を続行することができます。無限大の符号は、有限の数が無限大の値に近づく過程で、その有限の数に同じ操作を行った結果として得られる符号です。
状態フラグを取得することで、オーバーフローから生じた無限大と、ゼロによる除算の結果として生じた無限大を区別することができます。インテル® C++ コンパイラーは、デフォルトで無限大を符号付きとして扱います。無限大の出力値は +Infinity または -Infinity です。
非数 (NaN) は、無効な演算による結果です。例えば、0/0 および SQRT(-1) の結果は NaN です。一般に、NaN が関与する演算の結果は、NaN になります。NaN の小数部は指定されていないため、さまざまな NaN が考えられます。
インテル® C++ コンパイラーは、すべての NaN を同じものとして扱いますが、2 つの異なる形式を用意しています。
シグナル型 NaN: 最初の仮数ビットが 0 (ゼロ) の場合。通常、演算時に無効な例外が発生します。
クワイエット型 NaN: 最初の仮数ビットが 1 の場合。
浮動小数点ハードウェアは、代入演算を含む多くの算術演算中、シグナル型 NaN をクワイエット型 NaN に変更します。無効な例外が発行されることがありますが、結果の浮動小数点値はクワイエット型 NaN になります。
NaN の出力値は NaN です。