コンピューターにおける小数点の表し方には、2種類あります。
- 固定小数点数 (fixed point number)
- 浮動小数点数 (floating point number)
固定小数点数
例えば、8ビットの2進数があった場合、予め小数点の場所を決めてしまう方法を『固定小数点数』といいます。
例えば下3桁を小数、上5桁を整数とすると、青色で示した部分が少数、赤色で示した部分が整数となります。
- 00000000
固定小数点数はわかりやすく、処理速度も早いというメリットがありますが、大きい桁数を取り扱うとビット数が大きくなってしまうというデメリットがあります。
浮動小数点数
浮動小数点数は、『符号』『仮数』×『基数指数』の形式で表す方法です。
例えば、
- -0.011011
という2進数があったとします。これを32ビットの浮動小数点数で符号1ビット、指数7ビット、仮数24ビットで表すと、
- 11111111110110000000000000000000
となります。
どのように変換するかみてみましょう。
正規化(0.M×2-nの形に)する
まずは元の数字を0.M×2-nの形に整えます。※この作業を正規化といいます。
- -0.11011×2-1
符号と指数と仮数を抜き出す
正規化した数字から符号を1ビット、指数を7ビット、仮数を24ビットで表します。
- 符号(S = Sign):マイナスなので"1" ※プラスだったら"0"
- 指数(E = exponent):-1なので0000001の2の補数"1111111"
- 仮数(M = mantissa):11011なので"110110000000000000000000"
符号と指数と仮数をつなげる
つまり、-0.011011を32ビットの浮動小数点数で表すと、
- 11111111110110000000000000000000
となります。
ややこしいところがデメリットですが、とても大きい桁や小さい桁を少ないビット数で取り扱えるようになるのが浮動小数点数のメリットです。
おわりに
2進数に小数点以下の数字が出てくるとめんどくさくなりがちですが、慣れれば問題なしです。
だがしかし誤差には注意。