雑記

文系でも分かるゼロ除算。「0÷0」がダメな理由を徹底解説

更新日:

ネット上で定期的に話題となる、「0÷0」がエラーとなる事象。

この計算が禁忌であることは、理系の人やIT企業に勤めている人にとっては常識のことだと思う。
でも学生、特に文系の人たちにとっては理解しがたいことなのだ。何故なら、彼らは子どもの頃にたった1度だけ「してはいけません」と教わっただけだから。その理由まで知っている人はごく僅かだろう。

ゼロ除算問題がネット上で話題となる度に、理系人間は「え 常識だと思ってたんだけど」と発言する。しかし、多くの文系人間にとってそれは常識ではないし、そもそも知りもしないことなのだ。

そこで今回は、「△÷0」が何故ダメなのか徹底的に噛み砕いて説明していこうと思う。

「ゼロ除算」の基礎知識

「ゼロ除算」とは

0除算(じょさん)とは、0で割る割り算のこと。
1÷0や10÷0の様な計算のことを指す。

ゼロ除算は数学界の禁忌である

小学校で初めて割り算を教わった時、「0で割ってはいけません」と教わった人も多いだろう。これは、ゼロ除算が数学の世界ではタブーとされているためである。

カタカタと音を立てるタイプの電卓で、「1÷0」の計算をしてみて欲しい。結果は「ERROR」となるはずだ。
私が使っているWindows7の電卓機能でも「1÷0」の結果として、エラー音と共に「0 で割ることはできません」という表示が出た。

プログラムの世界において、ゼロ除算ほど恐ろしいものはない。これをしてしまったがために、突然プログラムが停止してしまったり、今まで蓄積していた膨大なデータを一瞬にして破壊してしまう危険性があるのだ。
実際、アメリカの海軍があるソフトを使用して試運転をした際、ゼロ除算が発生した影響で、主機が2時間半も海上で停止しまったという例もある。
(現在の技術では、ここまでの事態になることは稀だが)

 

一般人にとって、ゼロ除算は「へー、『ERROR』になるんだ。面白い」という程度のものかもしれない。しかし、現代社会を支えているプログラムの世界では、絶対にあってはならない事象なのだ。

ゼロ除算がダメな理由

小学生の算数レベルで考える

算数の文章題を例に考えてみる。

 10L(リットル)の水が入った水槽があります。
この水槽の水を、2Lの水が入るカップに分けた場合、カップはいくつ必要になりますか?

計算式は
10÷2=5
となるので、答えは
「5個のカップが必要」
となる。

ここまでは説明不要だと思う。というより、これが分からないのであれば、これ以降の説明も分からないはずなので諦めて欲しい。

では次に、小分けにするカップを違うものに交換してみよう。

 10Lの水が入った水槽があります。
この水槽の水を、0Lの水が入る穴の開いたカップに分けた場合、カップはいくつ必要になりますか?

「0Lの水が入る」という日本語が意味不明だが、今回はあえて式に表す。
10÷0
・・・これでは計算出来ない。

しかし、ここで諦めないのが理系の人間だ。
彼らは次の様に考えた。

10÷2」の計算結果は「5」だった。
10Lの水槽から水を2Lずつ取り出すという作業を、5回出来るということだ。
10L-2L=8L
8L-2L=6L
6L-2L=4L
4L-2L=2L
2L-2L=0L

ということは、「10÷2=5」とは「10から2を5回引ける」という意味なんだ。

これを「10÷0」の場合に当てはめてみよう。

「10から0を引く」ということになるのか。
10からは何回0を引けるんだろうか。
10-0=10
なんだから、0を引く回数に制限は無い。何回でも引くことが出来るはずだ。
10-0=10
10-0=10
10-0=10
・・・(以下略)
つまり、「10からは0を無限回に引ける」ということになるんだ!

この考えをそのまま式に表すと次の様になる。
10÷0=∞
※「∞」は無限を表す記号。

さて、文系の皆さんは、ここまでの説明を読んでどの様に感じただろうか。

「うっわ、あり得ねぇ。無理矢理過ぎ。ここまでする意味あるわけ?」
と思っていることだろう。
ぶっちゃけ説明を書いた私でさえそう思っている。

以上のことから、算数の世界では「ゼロ除算は無意味、未定義のもの」という扱いになっており、学校では「0で割ってはいけません」という結論だけを教えているのだ。

中学生の数学レベルで考える

さて、ここからは中学生レベルの話になる。

割り算や分数は、次の様に書き換えることが出来る。

 「A/B」は「Bx=A」

10÷2」という式をこのルールに当てはめてみよう。
10÷2」は分数に直すと10/2になる。
よって、

 A/B → Bx=A
10/2 2x=10

となる。

2x=10」。略さずに書けば「2×x=10」。
方程式だ。xに入る値を求めてみよう。
両辺に1/2をかけて、「2x」の「2」を消せばxが求められる。

 1/2×2x=1/2×10

x=5

確認してみよう。
2x=10
x=5

2×5=10
うん、合っている。

では今度は、「10÷0」でやってみよう。

 10/00x=10

0x=10」、つまり「0×x=10」。
おかしいことになった。
0には何を掛けても0になるはずなのに、答えが10となる掛け算の式が出来上がってしまった
しかも「0x=10」は、より略して書けば「0=10」になる。もはや「何言ってんだこいつ」という話だ。

 

ここまで来れば、「ゼロ除算って何かがおかしい」ということは理解出来たかと思う。

より高度な解釈法もあるのだが、ここでは割愛しておく。

「定義されていないからダメ」なのか

レッドカード

ゼロ除算がタブーである理由として、「定義されていないから」と結論付けている解説をいくつか見たことがある。
しかし、本当のところはちょっとだけ違う。ゼロ除算の結果には「不定」と「不能」の2種類があるのだ。

「不定」とは

不定とは、そのまま不定という意味だ。値が定まらない状態のことを指す。

0÷0」の計算をしてみよう。
・・・といっても、この計算式の正解は不明だ。(誰にも分からない)
そこで、仮に答えをxということにする。
0÷0=x

ところで、10÷2=5は、5×2=10と書き換えることが出来る。
このルールを「0÷0=x」にも当てはめると、こんなことが起きてしまう。
x×0=0
↓(見にくいので略して書くと)
0x=0

通常、方程式の解は1つだけのはずだ。
しかし、この式ではxに何の値を入れても式が成り立ってしまう。
x=1でもx=100でも、0を掛ければ答えは必ず0になるからだ。
しいて回答するならば「x=全ての数」、という所だろうか。

となると、「0÷0=全ての数」ということになる。
これが「不定」と呼ばれる状態だ。

ちなみに、Windowsの計算機で「0÷0」を計算すると「結果が定義されていません」となる。

「不能」とは

不能とは、計算不能であるという意味だ。
上の例の「10÷0」がまさに「不能」の計算式である。

先の説明では「10÷0」をあれこれといじって、最終的に
0x=10
という意味不明な式に辿り着いたはずだ。
この様に、どんな数を入れても式が成立しない(解なしの)割り算が、「不能」に分類される。

ちなみに、Windowsの計算機で「10÷0」を計算すると「0 で割ることはできません」となる。

アプリなどで「ERROR」となる理由

電卓アプリでゼロ除算をした時に「ERROR」と表示されるのは、プログラムの暴走を未然に防止するためだ。

プログラムは、そのプログラムを作った人が想定していなかったシチュエーションに陥った時、予想外の動きを見せる(暴走する)。
例えば、

  • シチュエーションAの場合は1の処理をする。
  • シチュエーションBの場合は2の処理をする。

というプログラムがあった場合、シチュエーションAやBになれば良いが、シチュエーションCになってしまうと何が起こるか分からないということだ。
それを未然に防ぐためには、

  • シチュエーションCの場合は3の処理をする。

もしくは、

  • シチュエーションが上記以外の場合、3の処理をする。

というプログラムを付け足さなければいけない。

数学界の永遠のテーマであるゼロ除算。計算結果が不定・不明であるが故に、プログラムの実行中にゼロ除算が起こってしまうと、どんなシチュエーションに陥るのかが想定出来ない。

だから、大抵のプログラムでは「÷0」の計算をしなければいけないと分かった時点で、その状況をエラーとして片付けてしまう。
プログラムの組み方は人によって違うが、大抵は

  • 計算式の中に「÷0」があれば、「ERROR」と表示する。
  • それ以外の場合は、計算を行う。

と言う様なプログラムを組んでいるはずだ。
(実際はもう少し複雑なことをしている)

アプリ上で「ERROR」と表示されると、ドキッとしたり「バグか?」と思ってしまうかもしれない。しかし、これはアプリの暴走を防ぐために必要不可欠な処理なのである。もちろんバグなどではない。

結論

ごちゃごちゃと解説してきたが、端的に言ってしまえば、「ゼロ除算は何かと面倒だからしてはいけない」のである。
その面倒臭さは今回の解説でよく伝わったかと思う。

-雑記

Copyright© 富築.com -とみづき- , 2019 All Rights Reserved Powered by AFFINGER5.