在 R 中,为什么 is.numeric(NaN) 打印 "TRUE"?
In R, why does is.numeric(NaN) print "TRUE"?
NaN` 表示 "Not a Number"。但是我发现
的结果
is.numeric(NaN)
是
[1] "TRUE"
有人知道为什么吗?我认为结果应该是 FALSE
.
"Not a Number" 并不意味着它不是一个数字。它是浮点数的一种特殊编码。请参见 ANSI/IEEE 754 浮点标准,或者只是 NaN 的维基百科页面。
这是所有计算语言的通用标准,R的处理也不例外。
在 R 中,typeof(NaN)
给出 "double",mode(NaN)
给出 "numeric"。现在,如果您阅读 ?is.numeric
,您会看到 is.numeric(x)
returns TRUE
如果 x
具有模式 "numeric" 并且不是一个因素。
IEEE标准定义了三个特殊的浮点数,Inf
、-Inf
和NaN
。
前两个有明确的数学意义:正无穷大和负无穷大。虽然它们不是实数的一部分,但它们是定义明确的极限。例如,1 / 0
是 Inf
.
那么NaN
是什么意思呢?准确地说是非实数。简单的情况是
0 / 0 # can be either Inf or -Inf
sqrt(-1) # not well-defined on real number set
Inf - Inf # can not be decided, can be 0, Inf or -Inf
在数值计算中,如果结果不能写成正实数,或Inf
或-Inf
,则表示为NaN
。在这方面,任何浮点数之间的算术运算都变得完全可表示。 NaN
在这方面非常有用,它表示 "something has gone wrong".
请注意,与具有多种类型(NA_real_
、NA_integer_
等)的 NA
不同,NaN
只有一种浮点数类型。任何逻辑、字符、整数值都不是浮点数,因此不能是 NaN
。 NA的定义不是一个通用的标准,R有自己的定义。
NaN` 表示 "Not a Number"。但是我发现
的结果is.numeric(NaN)
是
[1] "TRUE"
有人知道为什么吗?我认为结果应该是 FALSE
.
"Not a Number" 并不意味着它不是一个数字。它是浮点数的一种特殊编码。请参见 ANSI/IEEE 754 浮点标准,或者只是 NaN 的维基百科页面。
这是所有计算语言的通用标准,R的处理也不例外。
在 R 中,typeof(NaN)
给出 "double",mode(NaN)
给出 "numeric"。现在,如果您阅读 ?is.numeric
,您会看到 is.numeric(x)
returns TRUE
如果 x
具有模式 "numeric" 并且不是一个因素。
IEEE标准定义了三个特殊的浮点数,Inf
、-Inf
和NaN
。
前两个有明确的数学意义:正无穷大和负无穷大。虽然它们不是实数的一部分,但它们是定义明确的极限。例如,1 / 0
是 Inf
.
那么NaN
是什么意思呢?准确地说是非实数。简单的情况是
0 / 0 # can be either Inf or -Inf
sqrt(-1) # not well-defined on real number set
Inf - Inf # can not be decided, can be 0, Inf or -Inf
在数值计算中,如果结果不能写成正实数,或Inf
或-Inf
,则表示为NaN
。在这方面,任何浮点数之间的算术运算都变得完全可表示。 NaN
在这方面非常有用,它表示 "something has gone wrong".
请注意,与具有多种类型(NA_real_
、NA_integer_
等)的 NA
不同,NaN
只有一种浮点数类型。任何逻辑、字符、整数值都不是浮点数,因此不能是 NaN
。 NA的定义不是一个通用的标准,R有自己的定义。