ゼロ除算についてあらためて考える | 悪態のプログラマ

悪態のプログラマ

とある職業プログラマの悪態を綴る。
入門書が書かないプログラミングのための知識、会社の研修が教えないシステム開発業界の裏話は、新人プログラマや、これからプログラマを目指す人たちへのメッセージでもある。

小学生の頃だったろうか。「10 をゼロで割るとどうなるか?」という先生の質問に悩んだことがある。友達のひとりは「割り切れない」と答え、私はわけもわからずに関心した。

しかし、結局、正解は「ゼロで割り算をしてはいけない」というものだった。そんな問題出すんじゃないよ! これでは、「割り切れない」ではなく「やりきれない」ではないか。


普通の生活で、ゼロでの割り算をしなければならないような状況はないので、そんなことを気にする人は少ないかもしれない。しかし、プログラマにとって、ゼロ除算の回避は常識である。

プログラムがゼロ除算をすれば、その時点でエラーを出して異常終了してしまう。このため、プログラマが割り算を「書く」場合には、割る側の値(除数)がゼロにならないように、細心の注意を払う必要がある(※1)。簡単そうに思われるかもしれないが、除数が変数だったり関数の戻り値だったりすれば、なかなか大変なのである。


さて、そもそも「ゼロで割り算をしてはいけない」理由はなんだろうか。簡単な数字の計算なのに。

プログラミングの世界でよく目にする説明は、「ゼロ除算の結果の値は無限大(負の場合はマイナス無限大)になり、扱いきれなくなるため」というものだ。割り算では、除数が(正の数なら)小さくなるほど答えは大きくなるのだから、除数が0なら答えは「無限大」になるというわけだ。確かに、一般的にプログラムで扱う数値は有限(例えば、C言語の int なら INT_MIN~INT_MAX)なので、無限大は表現できない。

プログラマとしての理解はそんなところで十分かもしれない。私もその程度に考えていたが、今まで特に不都合はなかった。しかし、厳密には、これでは説明になっていないらしい。


調べているうちに、分かりやすい資料を見つけた。∫Integral Interval∫ さんの「0で割ってはいけない世界 」(PDF)である。

資料によれば、そもそも「無限大」は数ではない。数だとすると、「無限大+1」という計算ができるはずだが、その時点で、無限大より大きい数が出来てしまうことになり、おかしなことになる。「無限大」は数ではなく「状態」だというのだ(※2)。

また、割り算の除数を正の数からどんどん小さくしていけば、答えはどんどん大きくなるが、逆に負の数から大きくしていけば小さくなる。つまり、除数がゼロになった時点で、答えは「プラス無限大」であると同時に「マイナス無限大」でもある、というおかしなことになるのだ。

つまり、「無限大」という得体の知れない言葉では、説明したことにならないというわけだ。では、どう説明すべきか ・・・ ということについては、上記資料を参照いただきたい。結局のところ、ゼロ除算を認めるとゼロ以外の数が扱えなくなってしまうということらしい。

確かに、無理やりゼロ除算の答えを出そうとすると、矛盾が発生する。例えば、仮に「1÷0=a」とすると、「1=a×0」が成立するはずだが、ゼロは何に掛けても0なので、「1=0」となってしまうのである。


普段、何気なく順守してきた「ゼロ除算禁止のルール」だが、調べてみると奥が深かった。学生時代に文系であった私は、数学的知識は少ない方だ。今になってその面白さの一端に触れた気がする。



← このブログを誰かに読ませたいと思った方は、クリックを



※1
設計の時点で考慮されていればよいが、そこまでの細かさを期待できない場合が多い。

※2
例えば、データベースの「NULL」が数ではなく状態であるのと同じことだろう。



■関連記事
五捨五入
切捨て御注意



■リンク
ゼロ除算 【divide by zero】(e-Words)
ゼロ除算(IT用語辞典バイナリ)
数学の美しい世界へ∫Integral Interval∫ さん)
「a÷0」がいけない訳。しらぎくさいと。 さん)
なぜ0で割ってはいけないのか / 1÷0 / 何で0で割っちゃいけないんだ? (2ch)



異端の数ゼロ―数学・物理学が恐れるもっとも危険な概念
チャールズ サイフェ Charles Seife 林 大
早川書房 (2003/10)
おすすめ度の平均: 4.43
4 [アリストテレス&キリスト教]vs[ゼロ概念]の話が面白かった
5 とてもおもしろい!
4 不思議な数「0」の魅力に魔力


プログラマの数学
プログラマの数学
posted with amazlet on 06.01.09
結城 浩 結城 浩
ソフトバンククリエイティブ (2005/03/24)
売り上げランキング: 4,427
おすすめ度の平均: 4
4 文系の方向けの良書
4 文系プログラマにはよい
4 「情報工学をかじったことのないプログラマ」向けの本