7.実数表現
(3).実数の表現形式
(復習)10進実数を16進にする。
○整数部分⇒通常通り、10進を16進にする。
与えられた数を16で割り、余りを求める。
この操作を繰り返し、商が0になったら、下から余りを並べる。
○小数部分⇒16倍して整数部分の数を求める。
さらに、その小数部分の数を16倍する。この操作を繰り返し、整数部分の数を上から並べる。
(例題) 2011.1027を16進実数にする。
(解答) 2011÷16=125...11
125÷16=7...13
7÷16=0...7 これより、整数部は、
0.1027×16=1.6432
0.6432×16=10.2912
0.2912×16=4.6592
0.6592×16=10.5472
0.5472×16=8.7552
・・・ これより、小数部分は、
以上から、

となる。
現在、使用されている実数表現方式には、「IBM方式」「IEEE(アイトリプルイー)方式」の2通りある。
①.IBM方式 ・・・ 汎用コンピュータで従来使用されていた方式。
②.IEEE574方式 ・・・ 国際標準で制定された方式。マイクロソフト、インテル、モトローラ、などのプロセッサで採用された。現在のパソコンで幅広く使用されている。
①IBM方式の実数表現
単精度実数(4バイト)と倍精度実数(8バイト)は次のように構成される。(16進1桁=4ビット、である。)
|
符号 |
指数部 |
仮数部 |
全体 |
| 単精度実数 |
1ビット |
7ビット(Bias=64) |
24ビット(16進6桁) |
4バイト(32ビット=16進8桁) |
| 倍精度実数 |
1ビット |
7ビット(Bias=64) |
56ビット(16進14桁) |
8バイト(64ビット=16進16桁) |
なお、仮数部ではみ出した部分は「7捨8入」を行う。
符号部分は、「0」なら0または正の数、「1」なら負の数を表す。
(例題1) 1234.56をIBM単精度実数で表す。
(解答例)前回の問題より、B=16として正規化すると、
となり、

がわかる。
符号は正数だから先頭の1ビットは「0」で、

(64はBias。64だけずらして指数部は表現する)
ゆえに、「

」となる。(6桁目は「7捨8入」)している。
(例題2) IBM単精度実数「

」を10進数で表す。
(解答例)

より、先頭1バイトが

なので、符号は「0」で正。
さらに、指数部は、

より、66-64=2.
表現された数は、
より、193である。
Bias(バイアス)について
指数部分は、2進7ビットだから、「

」~「

」まで表現できる。
これは、10進に直すと、「

」~「

」であり、このままだと、大きい数しか取り扱うことが出来ない。
これを回避するために、Bias分だけ、ずらせて表現する。
IBM形式の場合、Bias=

だから、「

」を「

」、「

」を「

」だとして、小さい数も表現できるように対応している。
Biasがあるために、小さい数も表現できるわけである。
(復習)10進数
をIBM単精度実数に直せ。
(解答) 整数部分は、

である。
0.17×16=2.72
0.72×16=11.52
0.52×16=8.32
0.32×16=5.12
0.12×16=1.92
0.92×16=14.72
・・・ これより、小数部分は、

となる。
以上から、

となる。
ゆえに、

となり、
指数は、

となるので、指数部は

で、2進数に直すと、

となる。
符号は正の数だから、先頭1ビットは

。ゆえに、先頭の8ビットは、

である。
仮数部は16進6桁で、7桁目は「7捨8入」する。
これより、

となり、2つ合わせて「

」が答えである。
②IEEE754方式の実数表現
単精度実数(4バイト)と倍精度実数(8バイト)は次のように構成される。(16進1桁=4ビット、である。)
|
符号 |
指数部 |
仮数部 |
全体 |
| 単精度実数 |
1ビット |
8ビット(Bias=127) |
23ビット |
4バイト(32ビット=16進8桁) |
| 倍精度実数 |
1ビット |
11ビット(Bias=1023) |
52ビット |
8バイト(64ビット=16進16桁) |
なお、仮数部ではみ出した部分は2進数で「0捨1入」を行う。
符号部分は、「0」なら0または正の数、「1」なら負の数を表す。
IEEE754方式の特徴
1.基数
表示形式は、

である。
2.隠しビット
3.仮数部ではみ出した部分は、2進数で「0捨1入」する。
隠しビット
IEEE754は、基数が2なので、2進表示にして、「1.△△△」の形に直して(正規化)、「1.」の部分を省略して
仮数部を「△△△」で表す。これを「隠しビット」という。
IEEE754では、仮数部は23ビットだが、隠しビットにより24ビットの精度を保つ。
(例) 10進数

である。
となるので、

が得られる。
(例題) 10進数

をIEEE754方式の単精度実数で表す。
上の問題より、

であるので、
であるので、
符号ビット=
指数部=
仮数部=

(先頭から24ビット)
=

(24ビット目を0捨1入する)
であるので、まとめると、

となる。
(4).表現可能な範囲
IBM方式とIEEE754形式を比較する。
IBM方式単精度の表現可能な数
(最大の正数)

で、指数は

、仮数部は

が最大であるから、
(最小の正数)

で、指数は

、仮数部は

が最小であるから、
となる。
- IEEE754方式の場合、単精度と倍精度で、指数部のビット数が異なるので、表現できる最大数・最小数が精度によって異なる。
IEEE754方式単精度の表現可能な数
(最大の正数)

で、指数は

、仮数部は

(23桁)が最大であるから、
(最小の正数)

で、指数は

、仮数部は

が最小であるから、
となる。
- IEEE754単精度は、IBM単精度よりも表現できる範囲が小さいことが分かる。ところが、下記で述べるように、倍精度は驚くほど広い。これが、現在のPCでIEEE754が採用されている理由になっている。
IEEE754方式倍精度の表現可能な数
(最大の正数)

で、指数は

、仮数部は

(52桁)が最大であるから、
(最小の正数)

で、指数は

、仮数部は

が最小であるから、
となる。
(注意)以上のように、どの方式にも表現できる最大数と最小数が存在する。
最大数を超えると「オーバーフロー(overflow)」になり、最小数を超えると「0」と判定される。0でない小さい数であっても、0として認識されることは、計算の限界があることになる。
最終更新:2012年11月01日 09:32