Points & Lines

浮動小数点数形式で数値を表す①

浮動小数点数形式を使った数値の表現方法

限られたビット数の中で、ものすごく大きな数値や小さな数値を表現するための方法である浮動小数点数形式についてメモします。

固定少数点数について

浮動小数点数について理解するうえで対照的な数値表現の固定少数点数について。

固定少数点数は数値を収めることが出来る桁数が決められている形式のことで
例えば2進数を8桁で扱う場合、「01111.110」のような数値は整数部が5桁、少数部が3桁のようにビット列のどの位置に小数点があるかを暗黙的に決めて表現します。

以下のように、最下位ビットの右側を小数点と決めることで整数のみを扱うということにも出来ます。

しかし、

この方法では数値が8ビットの桁(8桁)に収まらないような、ものすごく小さな数や大きな数は8ビット内で表すことが出来ません。

数値の例

(小さな数)0.000000000021
(大きな数)100000000000

浮動小数点数形式を使用することで、こういった数値を限られたビット数で表現することが可能になります。
(実数に近づける)

浮動小数点数形式で表す

1. 指数表記と正規化

数値を浮動小数点数形式で表すには、

符号
仮数
基数
指数

の部位からなる指数表記という数式を使います。

例として10進数、0.375を指数表記を使って表します。
まず、10進数「0.375」を2進数に変換します。

2進数変換後の「0.011」を指数表記で表すと以下のようになる。

元の数値から小数点第一位の数が0ではなくなるように小数点の数を移動させる。
これを正規化という。

仮数部は正規化後の数値「0.M」のMの部分にあたる。

なお、浮動小数点数はひとつではなく様々な形式が存在しますが
今回は32ビット形式の浮動小数点数を例にして正規化を行っています。

指数部は元の数値から小数点を移動した数を表記する。
小数点の移動により、仮数部の数値が大きくなっているため指数部はマイナスで表す。(小数点、n個移動で -n)

基数部は2進数を扱っているため2で必ず固定される。

符号部は数値が正の場合に0、負の場合に1となる。

2. 数式の値をビットに格納する

正規化と指数表記に変換した数値を最終的にビットに格納することで浮動小数点数形式で表すことが出来ます。

数式を構成している部位の値をそれぞれ32ビット形式の必要な箇所へ格納

先頭のビットは正負を表す符号、次のビットから7ビット分を指数、残りのビットに仮数部の小数点以下の数値を格納し、残りの桁は全て0で埋める。

今回の場合、

符号部は正なので 0
指数部は-1なので 1111111(2の補数表現により、11111111となる値の7ビット分)
仮数部は0.11なので 11を格納(残りは0で桁埋め)

以上で浮動小数点数形式による数値の表現が完成となります。

Follow me!

モバイルバージョンを終了