0による除算
久しぶりに、0除算による実行時エラーを出してしまった。
「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」)、計算すること自体が不可能(無意味?)なのだ。
日本でずっとエンジニアをしていたら、こんな事には目もくれなかったことだろう。フィリピン人の同僚が素朴な疑問を体当たりでしてきてくれるので、自分もこれまで「当たり前」のこととして呑み込んでいたことをも、再考する機会が与えられるのだ。なんだか最近は、フィリピン人に教えられることの方が多い気がするなぁ。。。
Categories
se1 TrackBacks
Listed below are links to blogs that reference this entry: 0による除算.
TrackBack URL for this entry: http://www.proustcafe.com/mt-tb.cgi/410


はじめまして!
ひろがるblogより参りました。
>「当たり前」のこととして呑み込んでいたことをも、再考する機会が与えられるのだ・・・
たしかに、こういうふうに気がつくときってありますね!
なにか、あらためて「発見!」の感動とともに目の前の目線が変わったような時ってありますね。
PCのことは全然くわしくありませんが、ヨロシクお願いいたします。ヽ(^o^)ノ
Youyounonbiriさん、こんにちは。
普段は当然と思っていることが、実は違うんじゃないかと疑う気持ちって大事ですよね。大人になればなるほど、その気持ちを忘れてしまっていたような気がします。(反省)
数式の意味は難しくてわからなかったけど、追求してみたところがえらいね^^
私は数学が嫌いになった理由の一つに1/3=0,333...というやつ。永遠に3が続いて割り切れないのに、何で1/3とイコールになるのかと受け入れられなかった。絶対イコールじゃない!!って。
だけど今、改めて考えてみて1/3というのは一つの便宜上の概念で0.333というのは実数なんか?みたいな事をふと思いました。それと、わからない事は他にもたくさんあって、これはしょうがないよなーとか。
日本のラジオでやってた子供電話相談の子供の素朴な疑問が実におもしろかった。何でわかめは海にいるときにはだしが出ないの?とか。
要は答えは無数にあるわけで、大事なことは子供のように「何で?」って素朴な疑問を持てる感性が死なないことだよね。
みっちさん、こんにちは。
>私は数学が嫌いになった理由の一つに1/3=0,333...というやつ。
これは、両辺に3をかけると、「1 = 0.999....」という式が成り立つことになって、「なんで1が0.9なの?」と中学生を悩ますやつですねぇ。(証明するには「デーデキントの切断」などの公理が出てきて、私には理解不能です。。。)
つまりは、みっちさんもおっしゃられてる通り、素朴な疑問を追及する心を忘れないことですな。何歳になっても。