小数点に入ります。普段、小数点使っている気がしないですがこれを機に小数点大好きっこになりたいです。
コンピュータが数を表すやり方には次の2つの方法があるらしいです。
固定小数点数
固定小数点数は予め小数点の位置を決めてしまいます。
浮動小数点数
浮動小数点数は小数点の位置を可変にします。
詳しくみていきます。
固定小数点数
改めて固定小数点数とは、「ビット列のどの位置に小数点があるか」を暗黙的了解として
扱う表現方法です。
例えば「頭5ビットを整数にする」と決めるとします
00000.000
----- ---
整数部 小数部
「頭7ビットを整数にする」と決めるとすると
0000000.0
------- -
整数部 小数部
「最下位ビットの右側は小数点とする」と決めると
00000000.
--------
整数部
となります。
8ビットの固定小数点数であらわせる整数の範囲は、下記のようになります。
符号なし
00000000.
2進数 10進数
最小
00000000 0
00000001 1
| |
11111110 254
11111111 255
最大
nビットで表現できる範囲は
0 ~ 2ⁿ-1
符号あり
[+,-]0000000.
2進数 10進数
最小
10000000 -128
10000001 -127
| |
00000000 0
| |
01111110 126
01111111 127
最大
nビットで表現できる範囲は
-2(n-1) ~ 2₍n-1) - 1
浮動小数点数
浮動小数点数は、指数表記を用いて数値を扱う表現方法となります。
指数表記とは
0.00025 → 000.25 * 10⁻³
± 0.25 * 10 ⁻³
符号 仮数 基数 指数
上記のような形式で数を表すのが指数表記となります。
コンピュータで扱うのは2進数のため、基数「2」となります。
± m * 2 e
符号 仮数 基数 指数
コンピュータは浮動小数点数として、残りの可変部分(符号、仮数、指数)の値を
ビットに割り当てて数を表現します。
- 0.1011 * 2 ⁻⁵
上記の数字で説明すると
-が符号
1011が仮数部
-5が指数部
となります。
浮動小数点数の正規化
以下の数があります
① 0.12345 * 10⁻⁴
② 0.012345 * 10⁻³
上記の仮数部を5桁の枠にはめ込んで保管しなければならないと
した時に、元の値を保持できるのは
①となります。
「指数と仮数の組み合わせ」には、いろんなパターンがあるようです。
ただ「限られたビット数の中でより多くの桁数を保持する」という制約があれば
なんでも良いというわけにはいきません。
0.012345 * 10⁻³ → 0.12345 * 10⁻⁴
0.00101 * 2⁻³ → 0.101 * 2⁻⁵
上記の操作を正規化と呼びます。
まとめ
小数点大好きっこになるために、明日はさらに深いところまでやります。