【Javascript】0で割ると?
0で除算するとどうなるかはプログラム言語によってさまざま。
例えばphpでは"php -r '10/0;'" → Warning(警告)が発生。
MySQLでは"select 10/0" → NULL(極力エラーで止めない方針だからか)。
PostgreSQLではエラーがでてSQLを実行できない。
ではJavascriptでは?
- ... 10 ÷ 0 → Infinity(正の無限大)
- ... 0 ÷ 0 → NaN(Not-A-Number、非数)
- ... -10 ÷ 0 → -Infinity(負の無限大)
それぞれ、JavaScriptやECMA-262で定義されているもの。
各ブラウザの勝手な仕様ではない。
仕様によると、こうなる。
- ... Infinity × Infinity → Infinity
- ... 10 ÷ Infinity → 0
- ... 10 + Infinity → Infinity
- ... 10 - Infinity → -Infinity
Infinity を掛けたものは全て Infinity であり、Infinity で割ったものは全て 0 。
なお、InfinityはNaNではない。それぞれ別のもの。
- ... InfinityはNaN(非数)ですか? → false
- ... Infinity == Infinity ですか? → true
- ... Infinity > 10000 ですか?→ 比較も可能
- ... 1.79E+310 = 1790000......(311桁)を表示してみてよ → オーバーフロー → Infinity
- ... 2の1023乗までは大丈夫なんだけど、2の1024乗 → オーバーフロー → Infinity
JavascriptはオーバーフローしてもInfinityにして処理を続けてくれる。まともな数値ではなくなるが、エラーで止まらない。
Infinityは、NaNやundefinedのような特殊な値と違い、通常の数値と同じように比較、演算できる。
スクリプトの処理中に0で割り算しちゃったらどうするんですか
Javascriptだと、何ごともなかったかのように処理が進みますね。。。
エラーで停止するわけではないし、例外も投げないということと、無限大(Infinity、-Infinity)か非数(NaN)になるのを知っていれば何とかなるのでは。
ここに書いてある
Infinityプロパティ
https://developer.mozilla.org/ja/Core_JavaScript_1.5_Reference/Global_Properties/Infinity
参考
Numberオブジェクト
https://developer.mozilla.org/ja/Core_JavaScript_1.5_Reference/Global_Objects/Number
そのほかのグローバルプロパティ
https://developer.mozilla.org/ja/Core_JavaScript_1.5_Reference/Global_Properties
コメント