NaN 【Not a Number】 非数
概要
NaN(Not a Number)とは、プログラミングにおいて、数値(実数)であることが期待される演算や処理の結果が数値として表せないものになったことを示す特殊な表現。数値表現の標準規格であるIEEE 754に規定があり、多くのプログラミング言語が対応している。0を0で除算(0/0)したり、0に無限大を乗算したり、負数の対数や平方根を求めようとすると、結果は実数として表すことができないため、代わりにNaNが代入される。数値計算だけでなく、例えば数値として解釈できない文字列を数値に変換しようとした場合などにも用いられる。0以外の数を0で除算した場合などに生じる無限大(Infinity)とは区別される。
NaNは他の何とも同一ではなく、数値との大小も定義できないため、少なくとも一方にNaNを含む比較では、大小や一致(==や===など)の結果はすべて偽(false)、不一致(!=や<>など)の結果はすべて真(true)となる。NaN同士の一致(NaN==NaN)も偽、不一致(NaN!=NaN)も真となってしまうため、計算結果がNaNかどうかを比較演算子で調べることはできず、isNaN()、isnan()などのNaNかどうかを判定する専用の関数を用いる。
IEEE 754ではNaNの取り扱い方についてqNaN(quiet NaN)とsNaN(signaling NaN)の二つが定められ、ビット列としての表現形式が違っている。前者はNaNに演算を行うことができ(ただし何を行っても結果はNaNになる)、後者はNaNに演算を行おうとすると例外やエラーが発生する。言語によってどちらに対応するかは異なり、例えばJavaScriptのNaNは常にqNaNである。
(2018.10.24更新)