コンピュータで小数を表現する方式【浮動小数点数】

浮動小数点数


コンピュータでは数値はすべて2進数で表現されます。その際、小数をはじめとした実数はどのように表現されるのでしょうか。そして、より大きな数を扱うには、より小さな数を扱うにはどのような方法があるのでしょうか?

この記事ではコンピュータにおける小数の表現方式のひとつである浮動小数点数について解説していきます。

浮動小数点数とは?


浮動小数点数とは、コンピュータにおいて小数(実数)を表現する方式のひとつです。「浮動する小数点の数」という名称から、浮動小数点数では小数点位置を浮動させます。

そうすることで数値を柔軟に表現することができ、扱うことのできる数値の範囲も広くすることができるのです。コンピュータにおいて小数を扱う場合にはたいてい浮動小数点数が利用されます。

浮動小数点数はプラス(0)かマイナス(1)からなる符号部と、指数の大きさを表す指数部、基数と指数を除いた値である仮数を表す仮数部から構成されます。

浮動小数点の方式では、指数部の値によって小数点の付く場所を変えることが可能です。指数部の値によって小数点が「浮動」するというわけです。

浮動小数点数


ちなみに指数とは、累乗を示す数の右上にある小さな数字のことです。

$${
2^{4}
}$$

たとえばこの場合だと4指数です。これは2を4回掛けることを示します。

浮動小数点数の形式:IEEE754


浮動小数点数の形式は複数あり、試験においては出題内容に従うしかありません。ここではしばしば浮動小数点数の説明で利用される、IEEE754(32ビット、単精度)についてまとめていきます。

これを理解するだけでも浮動小数点数の理解に繋がりますから、ぜひ最後まで読んでみてください。

IEEE754で浮動小数点数を表現する


ここでは10進数の「10.75」をIEEE754で表現してみます。

IEEE754形式にする手順は以下の通りです。

  1. 符号部に符号ビットを入れる
  2. 10進数を2進数に変換する
  3. 仮数部が「1.xxxxx」の形式になるようにする
  4. 指数部にバイアス値を加える


これらについて順番に説明していきます。

1.符号部に符号ビットを入れる


「10.75」はプラスの数ですから符号部には「0」を入れます。

2.10進数を2進数に変換する


基数変換の手順はこちらの記事を参考にしてみてください。この記事では基数変換についての説明は割愛します。

というわけで、10進数の10.75を2進数に変換して

1010.11


となります。

3.仮数部が「1.xxxxx」の形式になるようにする


ここで、

$${
{2}^0 = 1
}$$


とすると、「1010.11」は

$${
1010.11 × {2}^0
}$$


となります。

仮数を求めるためにはこの数を正規化しなければいけません。ここでいう正規化はたんに桁をそろえることと捉えていただいて大丈夫です。

正規化の結果は

$${
1.01011 × 2^3
}$$


となります。

ここで整数部が「1」なのは有効桁数の都合上明らかですから、先頭の「1」省きます。仮数部は23ビット保持されますから、下位ビットを「0」で埋めて仮数部は以下のようになります。

01011000000000000000000


「0」と「1」の羅列で訳がわからない感じになりましたが、あともう一息です!

4.指数部にバイアス値を加える


IEEE754では指数部は8ビットあります。そして、IEEE754におけるバイアス値は「127」です。バイアス値とはある数を補正するための値のことです。

これを指数部の「3」に加えて

3 + 127 = 130


とします。

この「130」をプラス2進数に変換し

10000010


として、これを指数部とします(符号を表す部分は別にそんざいするため、ここでは指数部がマイナスの値を取ることはありません。常にプラスの値を取ります)。

これで10進数の「10.75」を浮動小数点数として表現できました。ビットパターンは以下の通りです。

0|10000010|01011000000000000000000


(「|」でそれぞれ符号部、指数部、仮数部を区切っています。こちら全部で32ビットです)

浮動小数点数に欠かせない「下駄ばき」:バイアス表現


バイアス表現とは指数部をマイナスの数にしないために指数に一定の値を加えることです。

IEEE754(32ビット、単精度)の場合指数部は8ビットをとるためバイアス値として「127」を加えます。

そして、なぜ指数をマイナスの数にしないようにするのかについて、先ほど「符号部が存在するため」と説明しましたが、もうひとつ理由があります。

仮数部の有効数字を一意に保つためです。

浮動小数点数の指数部をプラスに保つ「本当の」理由


有効数字とは、その名の通り「意味を持っている数字」のことをいいます。ここでは仮数として有効な数というわけです。

もし指数にマイナスの数を認めてしまうと位取りのゼロが発生してしまいます。

つまり「0.xxxxx」という形式になるのですが、これは有効数字として含まれません。これでは仮数としての意味がなくなってしまいます。

0.0xxxx」や「0.00xxx」も、結局は「0.xxxxx」という形式に収まりますからね。もしこれらを有効数字と認めてしまったら、数して不定となってしまいます。

よって常に指数部をプラスにするためにバイアス値を加えるわけです。


ちなみに、バイアス「下駄を履かせる」という意味もあり、これはちょうど「数を丁度いい大きさにするために上げ底のために下駄を履かせる」というようにもたとえることができます。





それでは、今回はここまでといたします。
最後までお読みいただきありがとうございます。


浮動小数点数
最新情報をチェックしよう!