4

多くの言語には isNaN() 関数があります。私は自分自身に問いかけています:なぜ数字ではないことを確認するのですか?

理由は純粋に論理的ですか、それとも is a number ではなく not a number をチェックする方が速いです?

これは純粋な理解の問題であることに注意してください。たとえば、 isNumber() 関数を実現するために isNaN() を否定できることを知っています。ただし、番号ではない
ことを確認する理由を探しています。

4

7 に答える 7

7

コンピューティングでは、NaN (Not a Number) は、特に浮動小数点計算で、未定義または表現不可能な値を表す数値データ型の値です。

ウィキ記事

Not a Number は式の特殊なケースであるためです。

これらの数字にはすでに意味があるため、0 や -1 などをそのまま使用することはできません。

Not a Number は、計算で何かがおかしくなり、そこから有効な数値を計算できないことを意味します。

を持つのと同じ考え方nullです。確かに、任意の数値を平均に割り当てることはできますnullが、混乱を招き、まれなケースであらゆる種類の奇妙なエラーに遭遇することになります。

于 2010-10-07T19:23:35.593 に答える
3

「非数」は、特定の浮動小数点計算の結果です。「ねえ、この変数は 120 を保持しているのか、それとも "abc" を保持しているのか」ということではありません。

于 2010-10-07T19:23:59.533 に答える
2

isThisCaseExceptionalisEverythingNormal私が書く可能性が高いという理由よりも、私にはより合理的に思えます

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
}
于 2010-10-07T19:26:42.897 に答える
2

数値であると仮定しているため、数値ではないかどうかをチェックします。NaN は、数値を期待している場合の例外的なケースであるため、この方法で行われることは理にかなっています。結局のところ、値が isNum であるかどうかを頻繁にチェックするよりも、isNaN を頻繁にチェックしたくないのです。

于 2010-10-07T19:27:54.100 に答える
1

これは、エラー状態 (数学的に定義されていないか、技術的な限界を超えている) を報告する方法です。

于 2010-10-07T19:23:44.300 に答える
0

NaNは次の目的で使用されます。

  • 非実数または未定義の値。
  • エラー処理。NaNを使用して変数を初期化すると、NaNをテストし、有効な値が設定されていることを確認できます。
  • メンバーまたはプロパティを無視するオブジェクト。たとえば、WPFはNaNを使用して、独自のサイズを定義しない視覚要素の幅と高さを表します。
于 2010-10-07T19:34:37.813 に答える
0

多くの言語では、NaN や Inf など、計算の結果が数値で表現できない場合に特別な表現を使用します。そのため、isNaN() は、結果が実際に数値であるか、NaN の特別なマーカーであるかをチェックします。

于 2010-10-07T19:24:46.660 に答える