Main Content

無限大と NaN

無限大

MATLAB® では、特殊な値 Inf を使用して無限大を表現します。無限大は、標準の浮動小数点値として表すには結果が大きすぎる、ゼロ除算やオーバーフローなどの演算で発生します。MATLAB に用意された Inf という関数は、正の無限大の IEEE® 算術表現を double スカラー値として返します。

MATLAB で正または負の無限大を返すステートメントの例を以下に示します。

x = 1/0
x =
Inf

x = 1.e1000
x =
Inf

x = exp(1000)
x =
Inf

x = log(0)
x =
-Inf

x が正または負の無限大であることを確かめたい場合は、関数 isinf を使用します。

x = log(0);

isinf(x)
ans =
     1

NaN

MATLAB では、"非数 (Not a Number)" を意味する 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 算術表現の 1 つを、double スカラー値として返します。この NaN 値の正確なビット単位の 16 進数表現は以下のとおりです。

format hex
x = NaN

x =

   fff8000000000000

必ず関数 isnan を使用して、配列内の要素が NaN であることを確認します。

isnan(x)
ans =

     1

MATLAB は、代替の NaN 表現の "非数 (Not a Number)" の状態を保持し、NaN の異なる表現をすべて同等に扱います。しかし、一部の特殊な場合では (おそらくハードウェアの制限により)、MATLAB が計算全体で代替の NaN 表現の正確なビット パターンを保持せず、その代わりに上記で定義された標準の NaN ビット パターンを使用することがあります。

NaN に対する論理演算

2 つの NaN は等しくないため、NaN を使用した論理演算では、等しくないことを確認するテストの場合 (NaN ~= NaN) 以外は常に偽が返されます。

NaN > NaN
ans =
     0

NaN ~= NaN 
ans =
     1