多くの言語には isNaN() 関数があります。私は自分自身に問いかけています:なぜ数字ではないことを確認するのですか?
理由は純粋に論理的ですか、それとも is a number ではなく not a number をチェックする方が速いですか?
これは純粋な理解の問題であることに注意してください。たとえば、 isNumber() 関数を実現するために isNaN() を否定できることを知っています。ただし、番号ではない
ことを確認する理由を探しています。
多くの言語には isNaN() 関数があります。私は自分自身に問いかけています:なぜ数字ではないことを確認するのですか?
理由は純粋に論理的ですか、それとも is a number ではなく not a number をチェックする方が速いですか?
これは純粋な理解の問題であることに注意してください。たとえば、 isNumber() 関数を実現するために isNaN() を否定できることを知っています。ただし、番号ではない
ことを確認する理由を探しています。
コンピューティングでは、NaN (Not a Number) は、特に浮動小数点計算で、未定義または表現不可能な値を表す数値データ型の値です。
Not a Number は式の特殊なケースであるためです。
これらの数字にはすでに意味があるため、0 や -1 などをそのまま使用することはできません。
Not a Number は、計算で何かがおかしくなり、そこから有効な数値を計算できないことを意味します。
を持つのと同じ考え方null
です。確かに、任意の数値を平均に割り当てることはできますnull
が、混乱を招き、まれなケースであらゆる種類の奇妙なエラーに遭遇することになります。
「非数」は、特定の浮動小数点計算の結果です。「ねえ、この変数は 120 を保持しているのか、それとも "abc" を保持しているのか」ということではありません。
isThisCaseExceptional
isEverythingNormal
私が書く可能性が高いという理由よりも、私にはより合理的に思えます
possible_number = some_calculation();
if (inNaN(possible_number)) handle_the_surprise;
// .. keep going
それ以外の
possible_number = some_calculation();
if (inANumber(possible_number)) {
// .. keep going
} else {
// handle the surprise
}
数値であると仮定しているため、数値ではないかどうかをチェックします。NaN は、数値を期待している場合の例外的なケースであるため、この方法で行われることは理にかなっています。結局のところ、値が isNum であるかどうかを頻繁にチェックするよりも、isNaN を頻繁にチェックしたくないのです。
これは、エラー状態 (数学的に定義されていないか、技術的な限界を超えている) を報告する方法です。
NaNは次の目的で使用されます。
多くの言語では、NaN や Inf など、計算の結果が数値で表現できない場合に特別な表現を使用します。そのため、isNaN() は、結果が実際に数値であるか、NaN の特別なマーカーであるかをチェックします。