NaNはNot a Numberの略であり、その名の通り数字でない値を表します。主に数字として解釈できないものを数字と解釈しようとしたときに現れます。web系の言語で出会うことは稀です。
NaNは歴史的経緯なのか厳密に数学を取り扱っているからかなのかプログラミング領域から見ると少々直感的でない動作をすることが多いです。よくあるのがNaNの比較です。
const a == NaN a == NaN // false NaN == NaN // false
NaNであること調べようとした時、NaNオブジェクトとイコールである、と式で書くとfalseが返ってきます。例はJavaScriptですが他言語でも同様です。これはNaNが数字で表せない値、転じて不明な値を表現しているためです。不明同士を比較しても結果は不明です。
NaNであることを調べるためには特定の関数を使います。大体isNaNとかそんな感じの名前で用意されているのでそちらで調べます。
$nan = acos(8); var_dump($nan); // float(NAN) var_dump(is_nan($nan)); // bool(true)