0割る0の答えを知っていますか?

By shin - 09/05/14 - このエントリをはてなブックマークに追加このエントリをYahoo!ブックマークに追加このエントリをdel.icio.usに追加このエントリをFC2ブックマークに追加

簡単そうですが、正確に説明できる人は案外少ないのではないでしょうか?

「0」とは?

0 (零、れい)は、無を表す数であり、−1 の次で 1 の前の整数である。英語 zero から、「ゼロ」とも呼ばれる。

0 を自然数に含めるかどうかは数学者の間でも考え方は分かれており、数論では含めないことが多いが、集合論や数学基礎論では含めることが多い。また日本の高等学校までの教育においては、自然数に含まれないとされている。

改めて読んでみると他にも非常に面白い事が書いてあります。整数であって自然数ではない。何もない事を表すもの。という辺りが表題の問である「0 % 0」のヒントになりそうです。

 

「0割る0」の答え

一部の電卓などでは「0」が表示されるので、勘違いされている方も多いかもしれませんが、厳密に言うと答えははっきり決まっていない様です。「何もない」ので割る事は出来ないという考えかたの様です。割られる方が「何もないもの」であれば更に意味がないとされています。意味が無いので答えも決めない。という論理の様ですね。

 

とはいえ、プログラムなどでは答えがないというのは非常に困るため、特別に定義している事が多いそうです。例えば「IEEE 754」という規格では被除数(割られる数)が 0 以外なら結果は正または負の無限大になります。どんな数字でもイケルという事でしょう。また被除数が 0 なら例外が発生します。 (そもそも無限大というものも処理が難しそうですが。)ちなみにGoogleの計算機機能では無視されます。

 

PHPで実行すると?

ではPHPではどの様に扱っているのでしょうか?
早速試してみましょう。下記の様な簡単なプログラムを実行してみます。


$ans = 0 % 0;
var_dump($ans);

# 実行結果
bool(false)

$ans = 0 / 0;
var_dump($ans);

# 実行結果
PHP Warning:  Division by zero in /path/to/test.php on line 4
bool(false)

この様に「Warning」が発生します。
実際にはこの様な記述は無いでしょうが、下記の様にプログラム内である数値を求めるために変数を利用しているとどうでしょうか?


$num1 = (int)$num1;
$num2 = (int)$num2;
$result = $num1 / $num2 ;

変数の型をintegerに変換する際に、意図しない値が入っていると「0」になってしまいますので、上記で実験した数式を実行してしまう事になります。この様な事はあまり無いかも知れませんが、一応知っていると良いかもしれません。