NaN对双打意味着什么?
NaN
和Infinity
什么区别? NaN
何时出现? 它是什么?
来自维基百科 :
在计算中,NaN(非数字)是表示未定义或不可表示的值的数值数据类型的值,尤其是在浮点计算中。 1985年,IEEE 754浮点标准引入了NaNs的系统使用,以及其他非有限量(如无穷大)的表示。
从MSDN :
表示不是数字(NaN)的值。 该字段是常量。
该常数的值是将零除以零的结果。
当操作结果未定义时,将返回此常量。
使用IsNaN确定值是否不是数字。 通过将值与另一个等于NaN的值进行比较,无法确定值是否为数字。
Infinity
( 正无穷大和负无穷大 )是导致溢出的浮点运算的结果(例如3.0 / 0
)。
-
Infinity
是一种数学结构:例如,在欧几里德空间中,通过null元素(在这种情况下为零)的除法应该产生无穷大:
1 / 0 = Infinity
-
Not a Number
或NaN
是计算构造,它伴随着解析器和程序限制,并且根据所讨论的函数 ,其输出可以被赋予不同的含义。例如,结果可能只能在数学上使用不同的数字系统来处理,这对于数学家来说很容易,但在你的函数中,你可能只是留下返回
NaN
的唯一实用选项。 考虑一下-1
平方根:sqrt(-1) = NaN
……在
complex
和phase 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
在动态类型脚本语言中是方便的,其中程序员通常不想打扰复杂的exception类型及其处理。
通常在0除以0时发生。阅读更多内容: http : //msdn.microsoft.com/en-us/library/system.double.nan.aspx
NaN代表“非数字值”。 为避免exception,您可以使用IsNaN来确定值不是数字。
NaN表示“非数字”,并告诉您double类型的变量没有任何值。