浮動小数点数

浮動小数点数とは、「整数部が1桁の小数」と「指数が整数の10のべき乗」との掛け算で表される数のことです。

浮動小数点数において、「整数部が1桁の小数」は、仮数と呼ばれ、6.352のような小数です。

例えば、\(6.352\times 10^{4}\)が浮動小数点数です。

一般的に、浮動小数点数は、コンピュータで利用されます。

2進数の浮動小数点数

2進数の浮動小数点数は、例えば、\(1.1101\times 10^{1100}\)のようになります。

\(1.1101\times 10^{1100}\)は、10進数では、\(1.8125\times 2^{12}\)となります。

浮動小数点数のビット列

浮動小数点数をコンピュータで扱う場合は、浮動小数点数をビット列で表現する必要があります。

浮動小数点数をビット列で表現する方法は、様々ありますが、以下でその一例を示します。

例えば、以下は、ある規格の32ビットのビット列の浮動小数点数の構造です。

この規格では、仮数の整数部は1に固定し、「符号」と「仮数の小数部」と「10のべき乗の指数」で浮動小数点数を表現します。ここでは、それぞれ、符号部仮数部指数部と呼ぶこととします。

つまり、この規格では、\(1.1101\times 10^{1100}\)という2進数の浮動小数点数があった場合、プラスの符号と仮数部の1101と指数部の1100で浮動小数点数を表現します。

以降で、符号部、仮数部、指数部について詳しく説明します。

符号部(1ビット)

この規格では、符号部は、0がプラス、1がマイナスの符号を表します。

仮数部(23ビット)

この規格では、仮数が1.01101であれば、仮数部は、01101000000000000000000になります。

指数部(8ビット)

この規格では、指数が1100であれば、指数部は、1100に1111111(10進数での127)を足した値になります。

つまり、指数が-1111111であれば、指数部は、00000000になります。

この仕組みにより、指数は、-1111111から10000000を表現できます。10進数だと、-127~128です。

浮動小数点数の精度

精度の例1

符号部が0、仮数部が23ビット、指数が33であれば、仮数部を1増加させると、1024増加します(\(2^{33-23}=1024\))。

つまり、この場合、符号部を0、指数を33に固定して、仮数部を増減させると1024刻みで数を表現でき、表現できる数の範囲は、8,589,934,592~17,179,868,160となります。

精度の例2

符号部が0、仮数部が23ビット、指数が23であれば、仮数部を1増加させると、1増加します(\(2^{23-23}=1\))。

つまり、この場合、符号部を0、指数を23に固定して、仮数部を増減させると1刻みで数を表現でき、表現できる数の範囲は、8,388,608~16,777,215となります。

精度の例3

符号部が0、仮数部が23ビット、指数が13であれば、仮数部を1増加させると、0.0009765625増加します(\(2^{13-23}=\displaystyle\frac{1}{1024}=0.0009765625\))。

つまり、この場合、符号部を0、指数を13に固定して、仮数部を増減させると0.0009765625刻みで数を表現でき、表現できる数の範囲は、8,192~16,383.999,023,437,5となります。

精度の例4

符号部が0、仮数部が23ビット、指数が-6であれば、仮数部を1増加させると、\(\displaystyle\frac{1}{2^{29}}\)増加します(\(2^{-6-23}=2^{-29}\))。

つまり、この場合、符号部を0、指数を-6に固定して、仮数部を増減させると\(\displaystyle\frac{1}{2^{29}}\)刻みで数を表現でき、表現できる数の範囲は、0.015,625~約0.031,249,998,137,354,85となります。