ゼロで割る。

 整数の割り算は誰でも知っていると思います。
 そもそも割り算とは何か?例えば,
  「6÷2は?」と聞かれたら「3」と答えるでしょう。
続けて「その理由?」はと聞かれれば,2×3は6だから,と答えるでしょう。つまり,「6÷2は?」というのは「2に何をかけたら6になるか?」という問題です。それでは
 「1÷0は?」
これは「0に何をかけたら1になるか?」という問題です。「どんな数aをとっても必ず0×a=0となる」ので「その問題を満たすような数はない」というのが答えになります。

※ちなみに「どんな数aをとっても必ず0×a=0となる」は証明できますか?
これは
「どんな数aに対しても足したら元のaになる数を0という」

「足し算と掛け算の分配法則が成り立つ」
から証明できます。例えば,
 a×0=a×(0+0)=a×0+a×0
これによりa×0=0となる。

次に,
「0÷0は?」
パッと見には同じ数を割っているので1となる気がします。
しかし,「0に何をかけたら0になりますか?」の答えなので,0でも2でも3でも…要はどんな数でも解です。つまり,「どんな数でも答えになる」が答えになります。
答えの個数がゼロだったり,無限にあったりするのは,算数の問題に対して答えが一つだけと思い込んでいると不思議に思われるかもしれませんが,問題そのものを落ち着いて見直すと「これこれという式を満たすような数があるか?あるとするとそれはどんな数か(複数であるかもしれないという前提で)?」という問題なのです。

さて,計算機でゼロで割るという操作をするとどうなるのでしょうか?数学的に言うとゼロ以外の数を割るなら答え無し,ゼロをゼロで割るなら任意の数が答えになるのですが,計算機ではゼロで割ると割込みが発生し,通常の実行を中断させてあらかじめきめた特殊な処理をすることになります。極端に言えば,プログラム自体が停止してしまうクリティカルなエラーになるかもしれません。浮動小数点演算では0÷0をNaN(Not a Number),ゼロ以外÷0をInfinityという数ならぬ特殊な記号で扱うこともありますが,それ以降の処理がどうなるかは詳しく検討しないとよくわかりません。ゼロで割る可能性があるときは事前に割る数をチェックして,ゼロで割る前にゼロで割る処理を飛ばす(その代わりの処理をする)ようにしなければなりません。
現在,普通のコンピュータ上で,普通のプログラミング言語でゼロで割っても,OS自体が停止してしまったり,コンピュータ自体が壊れることはないので,自分のプログラミング環境で一度試してみましょう。



この記事が気に入ったらサポートをしてみませんか?