今回のテーマは、「浮動小数点表示」である。
小数のある数値の表現方法は次の二つの形式がある。
$0.000125$ $0.125×10^{-3}$
指数を持たず小数点の位置が決まっているものを固定小数点表示、指数を持ち広い範囲の近似値を表すことができるものを浮動小数点表示という。

$0.125×10^{-3}$の例なら、0.125が仮数(M)、10が基数(B)、-3が指数(E)である。
コンピュータは2進数を扱うので、基数は2のものがほとんどである。仮数のビット数は決まっているので、大きな値や小さな値は近似値になる。

Sは、数値全体の符号を1ビットで表す。Sが0のときは、$(-1)^0 = 1$で非負(ゼロか正)となる。Sが1のときは、$(-1)^1=-1$で負となる。
では、$1000101010100000$という浮動小数点数を解読してみよう。

小数でそのまま表すと、$-0.625×2^{10}$ である。
それでは、+37を浮動小数点に変換してみよう。先ずは、+37の2進数を求める。

1ビット右にシフトすると2で割ったことになるので、2をかけておけば同じ数値である。
$10010.1×2$ 、 $1001.01×2^2$ 、 $100.101×2^3$ 、$10.0101×2^4$
$1.00101×2^5$ 、 $0.100101×2^6$
これらはすべて同じ値である。 $0.100101×2^6$ となる。

小数でそのまま表すと、$+0.578125×2^6$ である。
先ほどは、$1000101010100000$という浮動小数点数を解読したが、指数部が$2^{10}$とわかるので、10ビット左にシフトすると指数はなくなる。すなわち、仮数部の小数点を右に10ビット分だけ動かすと、左にシフトしたことになる。

仮数を有効に利用するための操作を正規化という。この浮動小数点形式の正規化は、仮数の左端に0が来ないようにするものである。仮数を2進数の小数で表すと、下記の2つは同じ値だが、正規化された下のもので記憶される。
$0.00001010×2^{14}$
$0.10100000×2^{10}$ ← 正規化されたもの
(参考)うかる! 基本情報技術者 [午前編] 福嶋 宏訓 (著) 日本経済新聞出版
コメント