2009年8月22日土曜日

浮動小数点とか

 このところずっとelispのプログラミングにかまけていたのだけれど――ちょっと競馬の予想プログラムをつくってみていたのだ――、elispの小数点以下をふくむ数値は浮動小数点なので厳密には正確ではない。
 ちょっとそれが不満で、たしか、commonLispならfloatじゃなかったけかなぁ、と考えていたところ、はたと気づいた。
 無限に小数点を表現できる言語があったとしてもどこかの桁数で丸めるということは必要じゃないか、と。単純に1÷3とやっただけで0.3333……と3が無限につづくのだから、1÷3とやっただけで処理がもどってこなくなってしまうじゃないか。1÷3なら割る前に判断がつくけど、たまたま、円周率をだすようなものならあらかじめ――X÷YのXとYの値を見て判断はつかないだろうし。
 そうやって考えると、コンピュータで正確に小数点を表現するなんて不可能なのか。しょせんコンピュータの中なんて有限なんだから。

 いやぁ、それにしても数学って時々、穴ぼこみたいに無限に落ちこむんだなぁ。

 よく現実は数学のようには割り切れないなんていうけど、実は数学でも割り切れないことなんてよくあることだよなぁ、きっと。