NaN と Infinity
Number 型は浮動小数点数以外に3つの値を持ちます。
最初の2つは Infinity と -Infinity です。Infinity は正の無限大の意味で Number.POSITIVE_INFINITY として定義されています。Number.MAX_VALUE の範囲を超えた値はこれになります。同様に-Infinity は負の無限大の意味で Number.NEGATIVE_INFINITY として定義されています。こっちは -Number.MAX_VALUE よりも小さい値ということになります。
3つ目の値は NaN で、Number ではない値という値です。Number.NaN でも使えます。
これら3つの値は、それぞれ以下のような場合に使われます。
trace(1 / 0); // Infinity が出力される trace(-1 / 0); // -Infinity が出力される trace(0 / 0); // NaN が出力される trace(Math.sqrt(-1)); // NaN が出力される
最後の例では負の数の平方根を求めようとしているため結果が NaN になっています。(解が実数でないため)
ところで、NaN は条件文で比較すると結果が必ず false になります。
trace(1/0 == Infinity); // true が出力される trace(0/0 == NaN); // false が出力される trace(NaN == NaN); // false が出力される
そのために isNaN() というグローバル関数が用意されています。NaN かどうかを調べる際にはこれを使います。
trace(isNaN(0/0)); // true が出力される
同様に Infinity や -Infinity を調べるための isFinite() 関数もあります。
trace(isFinite(1/1)); // true が出力される trace(isFinite(0/1)); // false が出力される trace(Infinity == Infinity); // true が出力される trace(Infinity == -Infinity); // false が出力される
Infinity と -Infinity はちゃんと区別されます。
コメントする