- 小数点の表現
コンピュータではより大きい(又は小さい)数値を表すために
浮動小数点形式を利用します
また、10進数を2進数で表現すると誤差が発生する場合が
あります
- 固定小数点形式
小数点を最上位ビットの右側に設定
※有効桁数までしか表せない
- 浮動小数点形式
数値に応じて小数点の位置を変える
↓ |
正規化 |
「仮数 × 2^指数」の形に変形
※正規化のルール:2進数表現で
「1 > 仮数 >= 0.1」
※別の考え方もある
(IEEEでは「1.XXX形式に変形」)
|
・32ビットの浮動小数点形式(レイアウト)
※符号はプラスが「0」、マイナスが「1」で表す
・浮動小数の例
10進「23.875」の場合、
2進数で表すと「00010111.1110」
正規化すると
「0.101111110 × 2^5」
符号はプラスなので「0」となる
レイアウトに配置すると
符号 |
指数 |
仮数 |
0 |
0000101 |
101111110000000000000000 |
※ここでは指数のマイナス(バイアス)は考慮していません
- 誤差
数値の表現方式や計算により発生する
<誤差の種類>
丸め誤差 |
切上、切捨て、四捨五入により発生 |
打切り誤差 |
循環(無限)小数により発生 |
けた落ち |
ほぼ同じ値の減算により発生
(※有効に桁が利用されないため) |
情報落ち |
大きな値と小さな値の加減算により発生
(※小さな値が反映されない) |
オーバーフロー
(桁あふれ) |
表現範囲の上限を超えることで発生 |
アンダーフロー |
表現範囲の下限を超えることで発生 |
- ゾーン10進とパック10進
誤差を発生させないための仕組み
・ゾーン10進数
10進の1桁を1バイト(8ビット)で表す
※通常8ビットあれば正数値-128から127まで表現できる
※最下位のゾーンビットには符号が設定される
プラス「1100」、マイナス「1101」
・パック10進数
10進の1桁を4ビットで表す
※奇数桁の場合は、最後に符号を付加
偶数桁の場合は、最後のの1桁数値は「0000」で符号を付加
ゾーン、パックの例:10進「234」の場合
ゾーン(3バイト) |
0011 |
0010 |
0011 |
0011 |
1100 |
0100 |
パック(2バイト) |
0010 |
0011 |
0100 |
1100 |
|
|
|