Main Content

无穷和 NaN

无穷

MATLAB® 用特殊值 Inf 表示无穷。除以零和溢出等运算会生成无穷值,从而导致结果因太大而无法表示为传统的浮点值。MATLAB 还提供了一个称为 Inf 的函数,该函数以 double 标量值形式返回正无穷的 IEEE® 算术表示。

下面显示了在 MATLAB 中返回正无穷或负无穷值的多个语句示例。

x = 1/0
x =
Inf

x = 1.e1000
x =
Inf

x = exp(1000)
x =
Inf

x = log(0)
x =
-Inf

使用 isinf 函数验证 x 是否为正无穷或负无穷值:

x = log(0);

isinf(x)
ans =
     1

NaN

MATLAB 使用一个称为 NaN(代表“非数字”)的特殊值来表示不是实数或复数的值。0/0inf/inf 之类的表达式会生成 NaN,就像执行涉及 NaN 的任何算术运算一样:

x = 0/0
x =

   NaN

您也可以通过以下方式创建 NaN

x = NaN;

whos x
  Name      Size                   Bytes  Class

  x         1x1                        8  double

NaN 函数将 NaN 的一个 IEEE 算术表示形式作为 double 标量值返回。此 NaN 值的按位十六进制精确表示形式为:

format hex
x = NaN

x =

   fff8000000000000

始终使用 isnan 函数来校验数组中的元素是否为 NaN

isnan(x)
ans =

     1

MATLAB 保留其他 NaN 表示形式的“非数字”状态,并同等对待 NaN 的所有不同表示形式。但是,在某些特殊情形中(可能由于硬件限制),MATLAB 在整个计算过程中不保留其他 NaN 表示形式的精确位模式,而是使用上文定义的标准 NaN 位模式。

对 NaN 执行逻辑运算

由于两个 NaN 彼此不相等,因此与 NaN 相关的逻辑运算始终返回 false,但测试是否不相等 (NaN ~= NaN) 除外:

NaN > NaN
ans =
     0

NaN ~= NaN 
ans =
     1