コンピュータで浮動小数点を扱う方法とは?基本情報技術者試験のポイント解説

数字が書いてある紙

紙で小数を書き表す場合は、小数部分と整数部分を区別するために小数点を利用します。それでは、小数をコンピュータで表すにはどのようにしたらよいのでしょうか。

コンピュータで小数を扱う場合は、基本的に浮動小数点表示と呼ばれる効率的な方法で小数を取り扱います。この記事では、コンピュータで小数を扱う方法について解説を行います。

目次

固定小数点表示とは

浮動小数点表示の解説に入る前に、直感的にわかりやすい方法である固定小数点表示について解説します。

固定小数点表示とは、小数の桁数に関わらず小数点の位置を固定して表示する方法のことです。例えば、数値を表す8桁の10進数の中で、小数点の位置を4桁目と5桁目の間と定義します。そうすると、例えば「1200.1000」などと小数を表記することになります。しかし、このうち下3桁の「000」は数値情報として意味がない値となります。本来であれば「1200.1」と表記すれば5桁で扱えるものが、小数点の位置を固定にしてしまうとどのような数値も必ず定めた桁数で表示しなければなりません。

もう一つの例を見てみましょう。例えば、「0000.00000005」という12桁の固定小数点表示の数値情報があったとして、実際に意味を持っている数値は最後の5だけです。しかしながら、固定小数点表示では12桁で表示しなければなりません。うまく意味を持つ数値だけを効率的に取り扱う方法はないのでしょうか。

浮動小数点表示とは

固定小数点表示よりも効率的に小数を扱う方法として、一般的にコンピュータでは浮動小数点表示が用いられます。浮動小数点とは、指数を用いて小数点の位置を変動させて小数を表示する方法です。

浮動小数点のポイントは、指数の活用です。上述した「0000.00000005」という数値であれば、指数を用いた表記である「0.5×10の-7乗」に変換します。そうすると、意味のある情報は数値部分の「5」と乗数である「-7」の2つになります。よって、これらの2つの数値のみをコンピュータ上で保持すれば、「0000.00000005」という大きな情報量を取り扱う必要はありません。

このように、指数をうまく用いて小数点の位置を変化させながら最小限の情報量で数値を取り扱う方法が、浮動小数点表示です。

浮動小数点の仮数・基数・指数

浮動小数点は、数値部分である仮数と乗数の底となる基数、そして乗数部分である指数から構成されます。上記の「0.5×10の-7乗」という例であれば、5が仮数、乗数の底である10が基数、-7が指数となります。

基本的にコンピュータ上では数値を2進数で取り扱いますので、基数は2で固定であり、残りの仮数と指数のみを情報として保持すればよいことになります。

コンピュータ上で浮動小数点表示を行う際には、ビット列のうちどこまでを仮数領域(仮数部)とし、どこまでを指数領域(指数部)とするかを予め決めておきます。例えば、8桁のビット列(1バイト)で浮動小数点を扱う場合に、うち5桁を仮数部に、残り3桁を指数部に割り当てるなど、ルールを定めておきます。

それでは、実際に浮動小数点をビット列で表してみましょう。例えば、2進数で「0.000011」(10進数で0.046875)という数値であれば、まず指数を用いた表示形式である「0.11×2の-4乗」に変換します。ここで、仮数は「11」となり、指数は3、つまり2進数で「100」となります。これを8桁のビット列で、うち5桁を仮数部に、残り3桁を指数部に割り当てるケースであれば、以下のように表示できることになります。

よって、「0.000011」(10進数で0.046875)という値は、浮動小数点表示では「00011100」と表示されることが分かります。

浮動小数点の正規化

浮動小数点表示においては指数部分を変えることで表記方法は何通りも存在します。例えば、210進数で「0.00512」という数値を扱う場合には、0.512×10の-2乗と表記しても、5.12×10の-3乗と表記しても、同じ意味となります。

コンピュータ上で浮動小数点表示を行う場合、一般的には「0.XX」のように小数点の位置が2番目になるように変形したものを利用します。また、「0.XX」という形式に小数を変形することを、浮動小数点の正規化といいます。上記の例であれば、「0.00512」は「0.512×10の-2乗」と表すのが正規化された表示方法となります。

単精度と倍精度

浮動小数点を扱う方法は、標準規格であるIEEE754で規格化されています。IEEE754では、浮動小数点を扱う方法として単精度と倍精度の2つを用意しています。多くのコンピュータではこの規格に沿って浮動小数点を扱っています。

単精度とは、32ビットで浮動小数点を表す方法です。32ビットのうち、8ビットを指数部に、23ビットを仮数部に、残り1ビットを符号に割り当てます。単精度では、10進数で-3.40282×10の38乗から3.40282×10の38乗までの範囲を、有効数字6桁で表記することができます。

一方で倍精度は64ビットで浮動小数点を表す方法です。64ビットのうち、11ビットを指数部に、52ビットを仮数部に、残り1ビットを符号に割り当てます。倍精度では、10進数で-1.79769×10の308乗から1.79769×10の308乗までの範囲を、有効数字15桁で表記することができます

まとめ

この記事では、基本情報技術者試験を受けようとされている方に向けて、コンピュータ上での小数点に関する内容の解説を行いました。浮動小数点表示は、コンピュータ上で効率的に小数を扱うための優れた方法です。基本情報技術者試験でも、比較的出題頻度が高い領域ですので、確実に押さえておくことをおすすめします。