数の表現

作成日:2001-05-29
最終更新日:

普通の数とコンピュータの数

これから記すことは私自身も理解していないことが多い。 しかし、理解していないと書くことも有意義なのではないかと思っている。

コンピュータでは普通の数が普通の数として扱えない、ということが昔どこだかに載っていた。 もうそのどこだかを確かめようと思っても確かめられないのだ。

全部で 10 ほどのもっともらしい定理があるのだが、 実はコンピュータの世界で成り立つとは限らない、というものばかりだった。 たとえばこんな感じである。

a > 0 ならば、b + a > b

まともに考えたら成立する論理である。しかし、コンピュータの演算では成り立たないことがある。 かりに a, b がそれぞれ 16 bit の符号付き整数としよう。a = 32767, b = 2 ならば、 b + a は桁溢れの結果負の数として表現されてしまう。

この問題を避けるには、整数を 16 bit で表現せずに 32 bit で表現すればいい、 と思うかもしれない。なるほど、a = 32767 ならば、解決する。 しかし、もっと大きな数になったら結果としては同じことが起きる。

このようなときは、多倍長形式を考慮しなければならない。 数の大きさに従って、 数の表現に必要なだけの領域が自動的に割り当てられるような方式が必要となる。

整数の場合は近似なしで表すことがほとんどだが、実数計算ではそうはいかない。 ごく普通の環境では実数を浮動小数点数(まれに浮動数という)で扱っている。 これは、数のオーダーにあたる部分と有効数字にあたる部分を分ける方式であり、 IEEE 方式が有名である。

また、固定小数点方式もある。勘定系システムで誤差が許されない場合に使われる。 また、浮動小数点数を扱うときに処理系ごとに計算結果が異なるのがいやで、 固定小数点を使うこともある(これは Knuth の組版システム TeX が代表的)。

IEEE 方式をさらに発展させた方式に URR ( Universal representation of real numbers ) がある。 これは浜田穂積さんの考案になる方式で、オーバーフローやアンダーフローに悩まされることがない、 という利点がある。しかし、この方式で演算できる処理系に私はまだ出会ったことがない。 どなたか、情報をおもちの方がいらっしゃいましたら知らせて下さい。

まりんきょ学問所品質の部屋 > 数の表現


MARUYAMA Satosi