NaN对双打意味着什么?

时间:2011-11-13 15:18:03

标签: c# floating-point nan

NaNInfinity之间有什么区别? NaN何时出现?它是什么?

6 个答案:

答案 0 :(得分:26)

来自Wikipedia

  

在计算中,NaN(非数字)是表示未定义或不可表示值的数值数据类型的值,尤其是在浮点计算中。 1985年,IEEE 754浮点标准引入了NaNs的系统使用,以及其他非有限量的表示,如无穷大。

来自MSDN

  
      
  • 表示不是数字(NaN)的值。该字段是常量。

  •   
  • 此常量的值是将零除零的结果。

  •   
  • 当操作结果未定义时,将返回此常量。

  •   
  • 使用IsNaN确定值是否不是数字。通过将值与另一个等于NaN的值进行比较,无法确定某个值是否为数字。

  •   

Infinitypositive infinitynegative infinity)的结果是导致溢出的浮点运算的结果(例如3.0 / 0)。

答案 1 :(得分:10)

  • Infinity是一个数学结构:

    例如,在欧几里德空间中,通过零元素的划分(在这种情况下为零)应该产生无穷大:

    1 / 0 = Infinity
    
  • Not a NumberNaN是一个计算构造,伴随着解析器和编程限制,根据函数可以为其输出赋予不同的含义有问题。

    例如,结果可能只能在数学上使用不同的数字系统来处理,这对于数学家来说很容易,但在你的函数中你可能会被留作唯一的实用选项来返回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在动态类型脚本语言中很方便,程序员通常不想打扰复杂的异常类型并对其进行处理。

答案 2 :(得分:4)

通常在0除以0时发生。在此处阅读更多内容:http://msdn.microsoft.com/en-us/library/system.double.nan.aspx

答案 3 :(得分:1)

NaN代表“非数字值”。为避免异常,您可以使用IsNaN来确定某个值不是数字。

答案 4 :(得分:1)

NaN表示“非数字”,并告诉您double类型的此变量没有任何值。

答案 5 :(得分:0)

检查double是否有值,如果没有,则返回0

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