小数表現
小数の表記法は主に浮動小数点方式と固定小数点方式がある。それぞれの特徴としては、浮動小数点方式は極端に大きな数や小さな数を扱うことができるが、情報落ちという誤差が生じる。逆に固定小数点方式は、情報落ちは起こらないが、浮動小数点方式に比べて表現できる値の範囲が狭い。
浮動小数点方式
浮動小数点方式では、実数を固定長のビット列によって指数形式(1.0×2-3など)で表現されるので、科学計算で扱うような極端な数を表現することができる。
浮動小数点数は、ビット列を符号部、指数部、仮数部の3つのフィールドに分けて数値を表現している。なお、浮動小数点数は標準規格である IEEE 754 が最も広く採用されているので、下記は IEEE 754 に従う。
- 符号部は、1ビットで表現され、0なら正、1なら負の符号ビットである。
- 指数部は、エクセス方式で表現され、半精度ではエクセス15、単精度ではエクセス127、倍精度ではエクセス1023、四倍精度ではエクセス16383で表す。
- 仮数部は、整数部分が1となる2進小数の小数部分を表す。また、整数部分が1となるように指数を調整することを正規化と呼ぶ。
10進法での-0.625を単精度浮動小数点数で表すことを考えてみる。符号はマイナスなので、符号部は1となる。
0.625を2進法で表すと 0.101 となるが、仮数部は整数部分が1でなければならないので、正規化すると 1.01×2-1 となる。単精度の指数部は8ビット、仮数部は23ビットとなるので、指数部は -1 をエクセス127で表すと 01111110 となり、仮数部は小数部分だけを表すので 01000000000000000000000 となる。
左から順番に並べると、10進法での -0.625 は 1 01111110 01000000000000000000000 となる。
固定小数点方式
小数を表現する固定小数点方式のひとつに、2進化10進法がある。2進化10進法には、ゾーン形式(アンパック形式)とパック形式があり、共に10進法の数値の1桁を4ビットで表すBCD表現が使用される。
| 10進数 | BCD表現 |
|---|---|
| 0 | 0000 |
| 1 | 0001 |
| 2 | 0010 |
| 3 | 0011 |
| 4 | 0100 |
| 5 | 0101 |
| 6 | 0110 |
| 7 | 0111 |
| 8 | 1000 |
| 9 | 1001 |
ゾーン形式
ゾーン形式では、10進数値の1桁を8ビットで表し、上位4ビットをゾーンビット、下位4ビットを数値ビットに分けて表現されるが、最後の1桁の上位4ビットには符号情報が格納される。
ゾーンビットにはデータが数値であることを表すコードが格納されるが、コンピュータによってコードが異なる。また、符号情報もコンピュータによって異なる。
パック形式
パック形式では、10進数値の1桁を4ビットで表す。ゾーンビットを必要としないため、同じビット長でも多くの数を表現できる。最後の4ビットは符号ビットを表す。