なぜ数を0で割る「ゼロ除算」はダメなのか

OneDividedByZero

 

目次

  1. この記事の目的
  2. 1を0以外で割るといくつになるのか
  3. 結論
  4. 1/0 が無限になる時がある

 

1. この記事の目的

プログラミングをしていると、やってはいけないと言われる「ゼロ除算」ってありますよね。
実際にゼロ除算を行うと、例外が吐かれたり、無限などの特殊値を得ることがあります。

この理由はプログラミングの世界にはありません。
そもそも数学の世界で、ゼロで割った値を計算できないのです。

では、これ以降は 1/0 がいくつになるのか考えて見ます。
1/0 がいくつになるのか分からないことにして、考えを進めていきます。

(この記事は数学ガチ勢を対象としません)
(ゼロ除算がダメな理由が分からない人になんとなくわかってもらいたいです。)

 

2. 1を0以外で割るといくつになるのか

1/0 はいくつになつのか分からないとして、10 以外の数で割って見ましょう。
110 で割ると、 0.1 になります。
15 で割ると、 0.2 になります。
11 で割ると、 1.0 になります。
...

表にまとめると下記のようになります。

 

割る数 10 5 1 0.5 0.1 0.01 0.001
1/(割る数) 0.1 0.2 1 2 10 100 1000

 

表をみるとわかりますが、割る数を 0 に近づけると、1/(割る数) はどんどん大きくなります。
では、 1/0 はいくつになるのでしょうか。
このままではまだ分からないので、グラフにしてみましょう。
どこかで見たことがありそうな方程式、 y = 1 / x です。

 

YEqualsOneDividedByXPositive

 

この青い曲線と、y軸(黒の縦棒)が交差する場所のy座標(高さ)が 1/0 の答えです。
しかし、実はこの曲線とy軸は交わることがないのです。

 

3. 結論

結論は、 「1/0 はいくつになるか分からない」です。

数学の世界でいくつになるかわからないので、そもそもプログラミングで計算もできないのです。

 

4. 1/0 が無限になる時がある

例えば JavaScript では 1/0 を計算すると Infinity(無限) という特殊な値になります。
確かに割る数を 0 に近づけるとどんどん結果は大きい数値になり、無限に近づきます。

しかし、僕はこれはあまり好きではありません。
結果が無限に近づくのは、割る数を + の方向から 0 に近づけた時の話なのです。

たとえば、 1 / (-10)-0.1 になります。
割る数を - の方向から 0 に近づけると、結果はマイナスの無限に近づきます。
割る数が - の時も含めたグラフを確認しましょう。

 

YEqualsOneDividedByX

 

1/0 を無限にしてしまうと、例外にならないのでプログラムが止まることは少なくなります。
でも、意図しないゼロ除算を見逃す原因にもなります。
なので、個人的には例外やエラーにしてほしいなと思います。
みなさんもゼロ除算には気をつけてプログラミングをしてください。