さて、「数ではない」と呼ばれるものが数と見なされるのは少し奇妙に思えるかもしれませんが、その事実にもかかわらず、NaN
それでも数値型です:-)
NaN
数値タイプの制限内で特定の値を表すことができないことを意味します(ただし、これは、丸める必要のあるすべての数値に当てはまる可能性がありますNaN
が、特殊なケースです)。
それらは異なる値である可能性があるため、特定のものNaN
は別のものと等しいとは見なされません。NaN
ただし、NaN
2718や31415と同様に、まだ数値タイプです。
素人の言葉で説明するためのあなたの更新された質問に関して:
NaNとの比較では、それ自体と比較した場合でも、常に順序付けられていない結果が返されます。比較述語はシグナリングまたは非シグナリングのいずれかであり、シグナリングバージョンはそのような比較の無効な例外を通知します。等式および不等式の述語は非シグナリングであるため、falseを返すx = xを使用して、xが静かなNaNであるかどうかをテストできます。
このすべての手段は(部分に分解されて):
NaNとの比較では、それ自体と比較した場合でも、常に順序付けられていない結果が返されます。
基本的に、aは、別の、さらにはそれ自体NaN
を含む他の数と等しくありません。NaN
比較述語はシグナリングまたは非シグナリングのいずれかであり、シグナリングバージョンはそのような比較の無効な例外を通知します。
aと別の数値の間で比較(より小さい、より大きいなど)操作を行おうとするとNaN
、例外がスローされる(シグナリング)か、結果としてfalseになる(シグナリングしない、または静かになる)可能性があります。
等式および不等式の述語は非シグナリングであるため、falseを返すx = xを使用して、xが静かなNaNであるかどうかをテストできます。
同等性(等しい、等しくない)のテストはシグナルを送信しないため、それらを使用しても例外は発生しません。あなたが通常の番号を持っているならx
、それからx == x
常に真になります。x
がの場合NaN
、x == x
は常にfalseになります。NaN
それはあなたに簡単に(静かに)検出する方法を与えています。