無限大と NaN
無限大
MATLAB® では、特殊な値 Inf
を使用して無限大を表現します。無限大は、標準の浮動小数点値として表すには結果が大きすぎる、ゼロ除算やオーバーフローなどの演算で発生します。MATLAB に用意された Inf
という関数は、正の無限大の IEEE® 算術表現を double
スカラー値として返します。
MATLAB で正または負の無限大を返すステートメントの例を以下に示します。
|
|
|
|
x
が正または負の無限大であることを確かめたい場合は、関数 isinf
を使用します。
x = log(0); isinf(x) ans = 1
NaN
MATLAB では、"非数 (Not a Number)" を意味する NaN
という特殊な値を使用して、実数または複素数ではない値を表現します。0/0
や inf/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