アットウィキロゴ

(4).表現可能な範囲

IBM方式とIEEE754形式を比較する。
  • IBM方式
符号 指数部 仮数部 全体
単精度実数 1ビット 7ビット(Bias=64) 24ビット(16進6桁) 4バイト(32ビット=16進8桁)
倍精度実数 1ビット 77ビット(Bias=64) 56ビット(16進14桁) 8バイト(64ビット=16進16桁)

IBM方式単精度の表現可能な数

(最大の正数) B=16で、指数はE=63、仮数部はM=0.FFFFFFが最大であるから、
   0.FFFFFF_{(16)}\times16^{63}=(\frac{15}{16}+\frac{15}{16^2}+\frac{15}{16^3}+\frac{15}{16^4}+\frac{15}{16^5}+\frac{15}{16^6})\times16^{63}
      =\frac{15}{16}(1+\frac{1}{16}+\frac{1}{16^2}+\frac{1}{16^3}+\frac{1}{16^4}+\frac{1}{16^5})\times16^{63}
      =\frac{15}{16}\frac{1-\frac{1}{16^6}}{1-\frac{1}{16}}\times16^{63}
      =(1-\frac{1}{16^6})\times16^{63}\approx 16^{63}\approx 7.023701\times10^{75}
(最小の正数) B=16で、指数はE=-64、仮数部はM=0.1が最小であるから、
   0.1_{(16)}\times16^{-64}=16^{-65}\approx 5.39761\times10^{-79}
となる。

  • IEEE754方式
符号 指数部 仮数部 全体
単精度実数 1ビット 8ビット(Bias=127) 23ビット 4バイト(32ビット=16進8桁)
倍精度実数 1ビット 11ビット(Bias=1023) 52ビット 8バイト(64ビット=16進16桁)
  • IEEE754方式の場合、単精度と倍精度で、指数部のビット数が異なるので、表現できる最大数・最小数が精度によって異なる。


IEEE754方式単精度の表現可能な数

(最大の正数) B=2で、指数はE=128、仮数部はM=1.11111111111111111111111(23桁)が最大であるから、
   1.11111111111111111111111_{(2)}\times2^{128}=(1+\frac{1}{2}+\frac{1}{2^2}+\dots+\frac{1}{2^{23}})\times2^{128}
      =\frac{1-\frac{1}{2^{24}}}{1-\frac{1}{2}}\times2^{128}=(1-\frac{1}{2^{24}})\times2^{129}\approx 2^{129}\approx 6.80565\times10^{38}
(最小の正数) B=2で、指数はE=-127、仮数部はM=1.0が最小であるから、
   1.0_{(2)}\times2^{-127}=2^{-127}\approx 5.87747\times10^{-39}
となる。
  • IEEE754単精度は、IBM単精度よりも表現できる範囲が小さいことが分かる。ところが、下記で述べるように、倍精度は驚くほど広い。これが、現在のPCでIEEE754が採用されている理由になっている。


IEEE754方式倍精度の表現可能な数

(最大の正数) B=2で、指数はE=1024、仮数部はM=1.11111111111111\dots111111111(52桁)が最大であるから、
   1.1111111111111111\dots1111111_{(2)}\times2^{1024}=(1+\frac{1}{2}+\frac{1}{2^2}+\dots+\frac{1}{2^{52}})\times2^{1024}
      =\frac{1-\frac{1}{2^{53}}}{1-\frac{1}{2}}\times2^{1024}=(1-\frac{1}{2^{53}})\times2^{1025}\approx 2^{1025}\approx 1.79769\times10^{308}
(最小の正数) B=2で、指数はE=-1023、仮数部はM=1.0が最小であるから、
   1.0_{(2)}\times2^{-1023}=2^{-1023}\approx 2.22507\times10^{-308}
となる。

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

最終更新:2011年11月15日 21:33