忍者ブログ

Memeplexes

プログラミング、3DCGとその他いろいろについて

0を0で割る

プログラミングでは、0を0で割ることが許されません。これを無理やり計算するプログラムを書くと、答えは数字ではないデータに化けてしまい、画面に表示するとNaN(not a number)と出るだけです。0を0で割った答えは、様々な可能性が考えられ、一つに絞れないからです。


可能性を絞る

0/0は1ではありません。0でもありません。あるいは、0であり1でありその他すべての数でもあるともいえます。これは禅問答ではなく、どんな数に0をかけても0になるため、元の数はさっぱりわからないままというだけのことです。

かんたんな具体例を考えましょう。6 / 2は、「2に何をかければ6になるか?」を計算します。現在が2で、未来が6なら、その計算結果をかけることによって未来にたどり着けるのです。

つまり、3をかければよいのです。スタートとゴールが決まっているのなら、ゴールから逆算してやれば自分が何をすべきかわかります。逆算!まさに割り算とはかけ算の逆の計算なのです。

スタートとゴールが0

ところが、スタートとゴールが0の場合こうは行きません。スタートとゴールが決まっていても、可能性は無限に存在します。0に何をかけても0だからです。

6/2のような普通の割り算なら、スタートとゴールが決まっていたら、通るべき道筋は1つに定まります。しかし0/0は、スタートとゴールが決まっているにも関わらず、道筋は文字通り無限にあります。一つに絞り込むことはできません。だからこそ、普通のプログラムは0/0を計算しても、NaN(数字ではない)と表示するだけなのです。どれか一つの数字を特別扱いして勝手に表示するわけにはいきません。

ちなみに、0を0で割るというのは、北極点の経度を計算しようとするのと同じだとも考えることができます。他の場所ではきちんと計算できるものも、そこでは無限の可能性があるのです。

拍手[1回]

PR