web-dev-qa-db-ja.com

NaNはダブルスに対して何を意味しますか?

NaNInfinityの違いは何ですか? NaNはいつ現れますか?それは何ですか?

24
Levi H

Wikipedia から:

計算では、NaN(非数)は、特に浮動小数点計算で、未定義または表現できない値を表す数値データ型の値です。 NaNの体系的な使用は、1985年にIEEE 754浮動小数点標準によって導入され、無限大などの他の非有限量の表現も含まれています。

そして [〜#〜] msdn [〜#〜] から:

  • 数値(NaN)ではない値を表します。このフィールドは一定です。

  • この定数の値は、ゼロをゼロで除算した結果です。

  • この定数は、操作の結果が未定義の場合に返されます。

  • IsNaNを使用して、値が数値でないかどうかを判断します。値がNaNに等しい別の値と比較して、値が数値でないかどうかを判断することはできません。

ここで、Infinity正の無限大 および 負の無限大 )は、オーバーフローを引き起こす浮動小数点演算の結果です(たとえば、3.0 / 0)。

27
Nasreddine
  • Infinityは数学的な構成です:

    たとえば、ユークリッド空間では、null要素(この場合はゼロ)で除算すると無限大になります。

    1 / 0 = Infinity
    
  • Not a NumberまたはNaNは計算構文であり、パーサーとプログラムの制限が付属しており、その出力には関数に応じて異なる意味を割り当てることができます問題です。

    たとえば、結果は異なる数体系を使用して数学的に扱いやすいだけかもしれませんが、これは数学者が簡単に実行できますが、関数では唯一の実用的なオプションのままにしておくことができますNaNを返します。 -1の平方根を考えてみましょう:

    sqrt(-1) = NaN
    

    ...complexphase spaceで扱いやすい操作。

実験

ブラウザでJavaScript.Console(CTRL + SHIFT + J)を開き、次のように入力します。

>>> Math.sqrt(-1)
NaN

>>> 1/0
Infinity

>>> Number.MAX_VALUE
1.7976931348623157e+308

>>> Number.MAX_VALUE *2
Infinity

>>> parseFloat("I am not a Number")
NaN

C#では、典型的な「NaN状況」はほとんど例外によって処理されます。

csharp> Int64.MaxValue;
9223372036854775807
csharp> Int64 i_64 = Int64.MaxValue;
//the number will overflow into the sign-bit
csharp> i_64 +=1;
//...or similarly with Doubles...
csharp> Double.MaxValue;
1.79769313486232E+308

//following, an exception is thrown before overflowing
csharp> Int64 i_64 = Int64.MaxValue+1;
{interactive}(1,29): error CS0220: The operation overflows at compile time in ch
ecked mode

動的型付き言語

全体として、NaNの使用法は、さまざまなプログラミング言語でやや柔軟に割り当てられます。いくつかの「コンテキスト情報」が失われたときにNaNを使用すると、プログラマが通常複雑な例外タイプに煩わされたくない動的に型付けされたスクリプト言語で便利です。そしてその取り扱い。

12
Lorenz Lo Sauer

通常、0を0で割ったときに発生します。詳細については、こちらをご覧ください。 http://msdn.Microsoft.com/en-us/library/system.double.nan.aspx

4
misha

doubleに値があるかどうかをチェックし、ない場合は0を返します

if (double.Equals(double.NaN, myValue))
    myValue= 0;
1
Jack

NaNは「数値ではない」の略です。例外を回避するには、IsNaNを使用して、値が数値でないかどうかを判断します。

1
Kolt

NaNは「数値ではない」を意味し、double型のこの変数には値がないことを通知します。

1
Fischermaen