0による除算

久しぶりに、0除算による実行時エラーを出してしまった。

 calculator「0除算による実行時エラー」とは、プログラムの中で0で割り算をするようなコードを書いてしまうと、解が出ない(存在しない?言葉が難しいが・・)為に、コンピュータの処理が停止してしまうというもの。

今日、職場でMakingをしてて「実行時エラー」が出たので、何かと思ってデバックしてみると、原因はこれだった。SE一年目のころは、何度かこんなエラーを出して怒られたことがあるが、今になってこんなPGを組んでしまうとは思わなかった。

SE一年目の頃は、忙しかったということもあって、「0で割ってはダメである」という定義を丸呑みしていたのだが、今考えると、「なぜ0で割ってはいけないのか?」という素朴な疑問が浮かんでくる。その疑問に気付かせてくれたのは、カウンターパートだ。

カウンターパートと一緒に、このエラーについて話をしていると、「っていうか、なんで0で割ったらダメなの?」という問いを投げかけられた。そして、恥ずかしながら自分は答えに窮してしまったのだ。

家に戻ってから、理数科教師の隊員に聞いたり、文献を読んだりして調べたら、なんとなく0で割ってはいけない理由が分かってきた。

簡単に説明すると、

X ÷ 0 = Y (X≠0)とすると、
X = 0 * Y という式が成り立つ。

すると、0に何をかけても答えは0になるので、右辺(0*Y)の答えは必ず0になる。一方左辺については、最初にX≠0と定義しているので、この式は成り立たないのだ。よって、0による割り算の答え(Y)は存在しないということになる。

また、0を0で割る場合はどうだろうか。

0 ÷ 0 = Y とすると、
0 = 0 * Y という式が成り立つ。

すると今度は、Yには何が入ってもOKということになる。(0に何をかけても0だから)

このことから導き出されるのは、0による除算の解は無限大に発散してしまい(「存在しない」もしくは、「なんでもOK」)、計算すること自体が不可能(無意味?)なのだ。

日本でずっとエンジニアをしていたら、こんな事には目もくれなかったことだろう。フィリピン人の同僚が素朴な疑問を体当たりでしてきてくれるので、自分もこれまで「当たり前」のこととして呑み込んでいたことをも、再考する機会が与えられるのだ。なんだか最近は、フィリピン人に教えられることの方が多い気がするなぁ。。。

補足1
写真は、Windowsの電卓にて0除算をしてみた結果。答えの部分に「0で割ることはできません」と表示されるとは、思わぬ小発見。
補足2
実際のコンピュータの世界では、除数が限りなく0に近い場合でも同様のエラーが発生する場合がある。これは、演算の中で切り捨てなどの内部演算が行われた場合、結局は0による除算として扱われてしまうことがあるため。

, ,