「小数の表現2」では、2進数での小数の扱いについて書きました。
このコラムでは、コンピュータ内部で実際に使われている「浮動小数点」について説明します。
浮動小数点の基本的な考え方は「小数の表現」で書きましたが、もう一度書きます。
10進数「+123.4」という数値があったとします。
これを「浮動小数点」形式で表現しなおすと、
+123.4 × 10 の 0乗
※0乗はすべて1となります。(なぜ?と思った方はこちらを)
となります。
+の部分を「符号」 123.4の部分を「仮数」 10の部分を「基数」 0乗の部分を「指数」
といいます。
「符号」「仮数」×「基数」の「指数」乗
という表現形式です。
「+123.4」という表現形式も「+123.4×10の0乗」という表現形式も同じ数値を表しています。
このように書いても同じです。
+12.34 × 10 の 1乗
+1234.0 × 10 の −1乗
「仮数」の小数点を動かし、それにあわせて「指数」を変化させることで、「数値」としては同一の値を表現しています。
これを利用することにより、少ない桁数で大きい数や小さい数が表現できるようになるのです。
「小数の表現」に書きましたが、「固定小数点」よりも少ない桁数で同じ数が表現できます。
では、コンピュータ内部でどのように利用しているのかを見てみます。
まずは、分かりやすいように10進数で考えます。
上の「+123.4」を次のように変形させていきます。
+123.4 × 10 の 0乗 +12.34 × 10 の 1乗 +1.234 × 10 の 2乗 +0.1234 × 10 の 3乗
「0.?」というところまで変形したら終わりです。
最初から「0.?」となっている数値はどうでしょう。
10進数「+0.005」であれば次のように変形します。
+0.005 × 10 の 0乗 +0.05 × 10 の −1乗 +0.5 × 10 の −2乗
ここで終わりです。
なぜ、「0.?」という形にするかというと、「全ての仮数が0.?という形になれば、0.という部分は常に同じですから、無視できる」からです。
「0.」という部分を書かなくても良いのであれば「より少ない桁数で数が表現」できます。
人間は普段10進数を使っていますから、「10」という「基数」も無視します。
すると、「+123.4」という数値を保存しておくためには、
「符号」の「+」 「仮数」の「1234」 「指数」の「3」
さえ覚えておけば良いことになります。
「0.」と「10」はどの数でも同じですから、
「符号」「0.」「仮数」×「10」の「指数」乗
という計算で元の数「+123.4」が分かるわけです。
コンピュータに数を記憶させるには変数が使われます。
変数に格納できる数値は「有限」ですので、上手く利用しなければ大きな数や小さな数が扱えません。
そこで、上のような方法が考えられたのです。
次は、いよいよ2進数で考えてみましょう。
「小数の表現4」へ進みましょう。
ブラウザの戻るボタンで戻ってください。