浮動小数点数

◆ 浮動小数点数

 浮動小数点数とは何か、符号部、仮数部(符号なし整数)、指数部(符号付き整数)で構成され、大きな値や小さな値を表現するのに向いている。 ・・・と書かれてもで調べても良く分からないので以下の様に考えます。
(ちなみにコンピュータにおける実数の近似値の表現方式なため、科学計算とかで使われるそうですが、プログラムしててあまり意識する事はなかったりします・・・)

 例) 10進数 23 を表現する。

230 × 10 -1
23 × 10 0
2.3 × 10 1
0.23 × 10 2


 上のようにいくつでも表現できます。
 では浮動小数点数はどういう意味なのかというと・・・

+ 2.3 × 10 1
符号部 仮数   基数 指数

 ここで基数を10と決めたら、符合部、仮数部、指数部だけの情報だけで済むようになるというのが、浮動小数点数の仕組みだそうです。

 よく過去問題で出てくるのが、IEEE754規格の浮動小数点数の問題なので、IEEE754規格で例を挙げます。
 IEEE754規格は2種類の表現方法があります。

単精度: (-1) 符号部   2 指数部 - 127   (1+仮数部)
倍精度: (-1) 符号部   2 指数部 - 1023   (1+仮数部)

 問題でよく使われるのが全桁数が32ビットの単精度の方です。
 ここで注意したいのが、基数は必ず2であると言う事と、 (上の例では10進数でやってしまたので基数は10だったのですが、通常は2進数で考える) 仮数部は左先頭が1.xxx・・・になるように調整するという事に気をつけます。 符号については 0 ・・・ 正 / 1 ・・・ 負 と値は固定と考えていいと思います。

符号
1ビット
指数部
8ビット
仮数部
23ビット


 上の図は、実際にIEEE745(単精度の方)で浮動小数点数に変換した時のビット配列の中身です。 これをまず覚えておきます。

 H17秋の過去問題より14.75をIEEE745に従って変換した際の、指数部Eのビット列を求める問題を例にすると

・まずは2進数にします。
 14.75(10) → 1110.11(2)

・そして仮数部を求めます。上の例だと1.xxx・・・にするには左に3ビット移動させる事になります。
 1110.11 → 1.11011
 よって仮数部の出し方は、表現方法では(1+仮数部)なので、小数の部分事を指します。
 仮数部 → 11011 となります。

・指数部は、上で左3ビットを移動させたので2の3乗となるような数値を算出します。
  2 3  =  2 130  −  2 127
 よって指数部は130という事になります。
(127と言うのは上の表現方法で説明した通りお決まり事みたいなものです)


 よって浮動小数点数で表すと以下のようになります。

0 10000010 11011000000000000000000
 
符号
正の値なので 0
指数部
130を2進数へ
仮数部
左から値を入れ、残りは0詰め

 問題では指数部の値は何か?ですので、10000010 となるわけです。


 問題によっては、指数部が負の値の場合は、2の補数で表すという注意書きがあります。 その場合は、指数部分を(10000010)を2の補数で表現しましょう。



TOPページに戻る