softelメモ

システム開発 ソフテルのブログ

【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

by yoshimura

2010/06/06 23:59

カテゴリ javascript

コメントする