このページをはてなブックマークに追加このページを含むはてなブックマーク このページをlivedoor クリップに追加このページを含むlivedoor クリップ

  • 追加された行はこの色です。
  • 削除された行はこの色です。
*目次 [#g1ff5155]

#contents


*固定小数点と浮動小数点 [#j0d5c831]
*固定小数点 [#hfd5224a]

 指数を持たず小数点の位置が決まっているものを''固定小数点表示''、指数を持ち広い範囲の数値を表すことができるものを''浮動小数点表示''と呼ぶ。
 指数を持たず小数点の位置が決まっているもの、即ち最下位ビットに小数点を固定し最上位ビットは符号をあらわす表示法を''固定小数点表示''と呼ぶ。最下位ビットに小数点が固定されているということは、整数しか表現できないともいえる。

例:

-0111
--最上位ビットが符号:0のときは正、1の場合は負
--最下位ビット以下は小スンとなっている
--よって、0111を10進数で表すと+7になる。
-1111
--最上位ビットが1なので、負
--2の[[補数]]で計算する(1111の全ビットを反転させて1を加える)と、1111→0001となる。0001は10進数で1。
--よって、1111は10進数で-1になる。-7になるわけじゃないことに注意。


**表現できる範囲 [#s7708b4b]

 次に、固有小数点表示の場合の表現できる範囲を考えてみる。

 8桁の2進数を固定小数点で表示するとき、表現できる値の範囲は10進数で表すと-128〜127になる。

 これは10進数2桁で表示される値の範囲が0〜99であることと同様に、最大値と最小値に注目して考えるとよい。固定小数点の数の場合の2進数8桁の最大値は「0111 1111」である。最上位ビットは符号を表し、0は正を表すからである。これを10進数に直すと127である。

 一方、最小値を考えると、最上位ビットを1とし、残りのビットを0とした「1000 0000」となる。これは10進数で-128である。

[復習]-128の計算が不安な場合、[[補数]]について復習しておいて欲しい。実際の計算を次に載せておく。

「1000 0000」を反転させると「0111 1111」になる。これに1を加えると、「1000 0000」である。これは10進数で128である。元々最上位ビットが1なので、マイナスをつける。ゆえに、「1000 0000」=-128となる。


*浮動小数点 [#j0d5c831]

 指数を持ち広い範囲の数値を表すことができるものを''浮動小数点表示''と呼ぶ。

例:

-固有小数点表示:0.0025
-浮動小数点表示:0.25×10SUP{-2};

 浮動小数点表示は、仮数・基数・指数の3つで構成される。

&mimetex("M \times B^E");

-M:仮数
-B:基数
-E:指数

 上記の例でいえば、0.25が仮数(M)、10が基数(B)、-2が指数(E)である。


**正規化 [#q0be0014]

 ある数があったとする。このとき浮動小数点表示の形式が決まっていた場合、いくつかの表現方法がある。例えば、固有小数点表示で「0.0025」と表現できる数値を、浮動小数点表示すると次のように書き換えられる。

-0.025×10SUP{-1};
-0.25×10SUP{-2};
-2.5×10SUP{-3};

 いずれも同じ値であることに着目して欲しい。しかし、浮動小数点表示の表示形式における仮数部の先頭を0を詰めてしまうと、仮数で表現できる桁数が減ってしまう。そこで0.1X…((1.X…のタイプもある))のような形にしたほうがよい。これを''正規化''という。つまり、正規化とは、仮数が定められた範囲内に入るように、指数と仮数を調整することである。


*浮動小数点表示の形式の種類 [#l50cb535]

 浮動小数点をどのように表すかは、コンピュータの設計者が決めることである。実際に色々な表現方法がある。


**よく登場する浮動小数点表示 [#zb216fcc]

 数値を16ビットの浮動小数点表示法で表示する。形式は次の通りである。

#img(http://security2600.sakura.ne.jp/main2/image2/fudou1.jpg)
#img(,clear)

-S:仮数部の符号(正は0,負は1)
-E:2のべき乗の指数部。負数は2の補数。
-M:仮数部の絶対値
-正規化は0.1X…

例:10進数の「0.375」(=2進数で「0.011」)をこの形式で浮動小数点表示して、正規化すると、次のような16ビット列になる。

#img(http://security2600.sakura.ne.jp/main2/image2/fudou2.jpg)
#img(,clear)


**IEEEの浮動小数点表示 [#t26e7e20]

 数値を32ビットの浮動小数点表示法で表示する。形式は次の通りである。

#img(http://security2600.sakura.ne.jp/main2/image2/fudou3.jpg)
#img(,clear)

&mimetex("\( -1 \)^s \times 1.M \times 2^{E-127} ");

-S:仮数部の符号(正は0,負は1)
-E:2のべき乗の指数部に'''関係する値'''。指数はE-127と一致する。
-M:仮数部の絶対値
-正規化は1.X…

例:10進数の「-0.1875」をIEEE形式で浮動小数点表示して、正規化すると、次のような32ビット列になる。

#img(http://security2600.sakura.ne.jp/main2/image2/fudou4.jpg)
#img(,clear)

 「0.1875」の2進数は「0.0011」である。指数を調整して正規化すると、1.1×2SUP{-3};である。


*参考文献 [#j8a2593d]

-『ソフトウェア開発技術者 合格エッセンシャルハンドブック』
-『1週間で分かる基本情報技術者集中ゼミ【午前編】 2006春秋』