アットウィキロゴ

実数型数値表現について

  • 仮数部の長さによって、実数表現の精度は決まる。
通常、4バイト浮動小数点数で表記される実数を単精度実数、8バイト浮動小数点数で表記される実数を倍精度実数、さらに、その倍の16バイト浮動小数点数で表記される実数を4倍精度実数、という。

(1).IBM実数表現方式(基数B=16)

  • 単精度の4バイト実数は、1ビットの符号ビット、7ビットの指数部、3バイト(24ビット)の仮数部からなる。
  • 倍精度の8バイト実数は、1ビットの符号ビット、7ビットの指数部、7バイト(56ビット)の仮数部からなる。
  • 符号ビットは、「0」で0または正の数、「1」で負の数を表す。
  • 指数部は、7ビット部分を整数に直し(0~127)、「64」を引く。 これにより、-64~63の指数を表す。


仮数部の求め方=正規化表現

仮数部は、先頭ビットから \frac{1}{2}\frac{1}{4}\frac{1}{8}\dots、の桁を表現する。
仮数部は、正規化(先頭のビットの前に、小数点があるようにする)を行ってから表現する。

16進数1桁は4ビットで構成されるので、単精度実数の場合、仮数部は16進数で6桁で表現できる。
倍精度実数の場合は、仮数部は16進数14桁で表現できる。

【例1】 10進数5.125をIBM単精度(4バイト)実数の16進表記にする。

まず、整数部は、5=5_{(16)}
小数以下は、0.125なので、
   0.125\times16=2.0
となる。ここで終わりで、5.125=5.2_{(16)}=0.52\times16^1 となる。
ゆえに、仮数部M=0.52_{(16})。指数部は1。

指数部は、64を加えて64+1=65=1000001_{(2)}
仮数部は、520000_{(16)}=0101\:0010\:0000\:0000\:0000\:0000
符号は正なので、0。

以上から、5.125を4バイト実数に直すと、
   01000001 01010010 00000000 00000000
となる。
これは、16進数表記にすると、41520000、となる。

【練習問題】(1)124.65625、(2)314.16、(3)0.1、のIBM単精度(4バイト)実数としての16進表記を求めよ。

解答

(1).124.65625

前回の結果から、124.65625=0.7CA8\times16^2であるので、

仮数部は0.7CA8_{(16)}。指数部は2

指数部は、64を加えて64+2=66=1000010_{(2)}
仮数部は、7CA800(16)=0111 1100 1010 1000 0000 0000。
符号は正なので、0。

以上から、5.125を4バイト実数に直すと、
   0100 0010 0111 1100 1010 1000 0000 0000
となる。
これは、16進数表記にすると、427CA800、となる。

(2).314.16

前回の結果から、314.16=0.13A\dot{2}8F5\dot{C}\times16^3 であるので、
仮数部は上位6桁(最終桁は7捨8入)の0.13A28F_{(16)}。指数部は3

指数部は、64を加えて64+3=67=1000011(2)。
仮数部は、13A28F(16)=0001 0011 1010 0010 1000 1111。
符号は正なので、0。

以上から、314.16を4
バイト実数に直すと、
   0100 0011 0001 0011 1010 0010 1000 1111
となる。
これは、16進数表記にすると、4313A28F、となる。

(3).0.1

前回の結果から、0.1=0.1\dot{9}\times16^0 であるので、
仮数部は上位6桁(最終桁は7捨8入)の0.19999A(16)。指数部は0。

指数部は、64を加えて64+0=64=1000000(2)。
仮数部は、19999A(16)=0001 1001 1001 1001 1001 1010(2)。
符号は正なので、0。

以上から、0.1を4バイト実数に直すと、
   0100 0000 0001 1001 1001 1001 1001 1010
となる。
これは、16進数表記にすると、4019999A、となる。

練習問題 10進数-123.45を、IBM単精度実数に直せ。


最終更新:2010年11月10日 18:52