NaN
IEEE 754 の単精度(32ビット)での NaN をビット列として表現すると s111 1111 1xxx xxxx xxxx xxxx xxxx xxxx となり、ここで s は正負の符号(多くのアプリケーションでは無視する)、x は特殊ペイロード(多くのアプリケーションでは無視する)である。
大小比較以外の浮動小数点数操作は一般に quiet NaN をそのまま伝播する。signaling NaN に対する浮動小数点数操作は不正例外を発生し、デフォルトの例外処理ではqNaNをオペランドとしたときと同様に演算結果としてqNaNを生成するだけである。
NaNとの大小比較では、自分自身と比較した場合でも「大小不明な結果」を返す。比較には signaling と non-signaling があり、signaling 版では NaN との比較を行うと不正例外を発生する。等号および不等号で比較する場合は常に non-signaling であり、x が quiet NaN なら x = x は偽 (false) を返す。他の一般的な大小比較は全て signaling であり、オペランドとして NaN を渡されると不正例外を発生するが、規格ではそれらの non-signaling 版も提供することになっている。
浮動小数点演算においては、NaNと無限大は別の概念であるが、どちらも浮動小数点数としての表現も特殊であり、それを使った演算も特殊である(文献によっては、それら両方を含む広義の「非数」という表現が見られることもあるが、混同のおそれが無い場合以外は避けたほうがよい)。不正な演算という概念と、算術オーバーフロー(無限大を結果とする場合もある)や算術アンダーフロー(非正規化数か、ゼロとなる)は異なる。
IEEE 754では、NaNの表現について、指数部は全て1とし(これは無限大と同じ)、無限大の場合は仮数部の全てを0とするのに対し、NaNは全0以外の任意のビット列としている。他に、先頭の符号ビットで正負の区別がある。また、NaNの種別としてquiet NaN (qNaN) とsignaling NaN(sNaN)があり、例外を投げる場合について違いがある。
仮数部のビット列について任意としているため複数の表現があり得るが、それらが必ずしも区別して扱われるとは限らない。qNaNとsNaNの表現について規格の以前の版では具体的に決まっていなかったなど煩雑なため、詳細は#エンコードの節を参照。
以下の処理で NaN が生成される可能性がある。
唯一の引数に NaN を指定された数学関数
不定形(英語版) 次のような除算: 0/0、±∞/±∞ 次のような乗算: 0×±∞、±∞×0 次のような加算(および等価な減算): ∞ + (−∞)、(−∞) + ∞ 標準には冪乗が2種類定義されている。 pow 関数と冪指数が整数である pown 関数は、0、1、∞ を 1 と定義している。 powr 関数は上記3つの不定形を不正演算と定義しており、NaN を返す。
結果が虚数となるような演算(以下は一部) 負数の平方根 負数の対数 -1未満の値や+1より大きい値の逆三角関数
必要な値がないとき、明示的に変数に NaN を代入しておくことがある。IEEE 754 制定以前、未定義値を表すのに特別な値(例えば −99999999)を使うことが多かったが、そういった値が常に想定通りに扱われるとは限らなかった。
上記の全ケースで常に NaN が生成されるとは限らない。マスクされていない例外やトラップを発生できる場合、NaNを生成する代わりにトラップを発生させることもある。引数が quiet NaN で signaling NaN ではない場合、例外の発生する条件が成立しておらず quiet NaN を結果として返す。明示的に代入する場合は signaling NaN であっても例外は発生しない。