浮動小数点数 | やさしい基礎理論


2024-06-20 更新

この連載は、基本情報技術者試験の受験者を対象としたものです。

多くの受験者が苦手としている「情報の基礎理論」の分野から毎回1つずつテーマをあげて、やさしくポイント解説と問題解説を行います。苦手分野を克服して、試験の得点をアップしましょう。

今回のテーマは、 浮動小数点数 です。

符号部、仮数部、指数部

コンピュータの内部では、電圧の高低を1と0に割り当てた2進数で、あらゆるデータを表しています。
1と0だけなので、そのままでは小数点数(小数点がある数)を表せません。
そこで、小数点数を表すときは、データの表現を工夫しています。
よく使われる工夫として、今回のテーマである「浮動小数点数」があります。

浮動小数点数は、1つの小数点数を「符号部」「仮数部」「指数部」という3つの整数の情報で表すものです。
どれも整数なので、1と0だけで表せます。

例として、-101.011という2進数の小数点数を3つの整数で表してみましょう。

整数部が0で小数点以下1桁目が1になるように桁をずらしてください。
-101.011=-0.101011×23になります。

-0.101011×23において、-が符号部、小数点以下の101011が仮数部、23の3が指数部です。
符号部は、プラスを0とし、マイナスを1とすれば、1と0だけの整数です。
指数部の3は、2進数で表すと11なので、これも1と0だけの整数です。
仮数部の101011は、これも1と0だけの整数です。
この形式にするために、-101.011の小数点の位置をずらしたのです。
浮動小数点数の「浮動」は、小数点の位置をずらすことを意味しています。

-101.011という小数点数を、符号部0、仮数部101011、指数部11という3つの整数の情報で表せました。
符号部、仮数部、指数部を、それぞれ何ビットで表し、どのような順に並べるかを取り決めれば、1つの浮動小数点数になります。
例えば、符号部1ビット、仮数部11ビット、指数部4ビットで、符号部、指数部、仮数部の順に並べて、全体で16ビットのデータにするなら、[0][0011][10101100000]という浮動小数点数になります。
ここでは、わかりやすいように [ ] で区切っていますが、実際には、0001110101100000という1つのデータです。

正規化の方法

小数点の位置をずらして-101.011を-0.101011×23にという形式にすることを「正規化」と呼びます。
正規化とは、「データの表現を整える」という意味です。
なぜ、わざわざこんな難しい言葉を説明するのかというと、後で示す問題で使われているからです。

浮動小数点数の正規化には、2つの方法があります。
1つは、これまで示してきたように、整数部が0で小数点以下1桁目が1になるように桁をずらして、小数点以下を仮数部とする方法です。
-101.011なら-0.101011×23として101011を仮数部とします。
もう1つは、整数部が1になるように桁をずらして、小数点以下を仮数部とする方法です。
-101.011なら-1.01011×22として01011を仮数部とします。
どちらの方法も、小数点以下を仮数部とするので、仮数部は1と0だけの整数になります。

符号部のマイナスを表す方法

0.0001011という小数点数を浮動小数点数にすると、0.0001011=0.1011×2-3なので、符号部がマイナスになります。
符号部のマイナスを表すには、「2の補数表現」および「イクセス表現」という方法があります。
2の補数表現は、この連載の第2回で説明したので、ここではイクセス表現を説明しましょう。

イクセス(excess)とは、直訳すると「過剰」という意味ですが、イクセス表現を「げたばき表現」と呼ぶことがあります。「げたばき」とは、学校でテストの得点が低いときに全員に加点することを「下駄を履かせる」といいますが、それと同じ意味です。

イクセス表現の仕組みは、トランプを例にして考えると、わかりやすいでしょう。

Aを1、Jを11、Qを12、Kを13とすれば、トランプで表せる数は、1~13のプラスの数だけです。
ここで、真ん中の数の7をゼロとみなしたら、どうなるでしょう。
7より1小さい6は-1であり、7より2小さい5は-2であるとみなせます。
逆に、7より1大きい8は1であり、7より2大きい9は2であるとみなせます。
これによって、トランプで-6~6の数を表せます。これが、イクセス表現の仕組みです。
ここでは、7という下駄を履かせています。

たとえば、符号部が4ビットの場合は、表せる数が0000~1111(10進数で0~15)なので、その真ん中の0111をゼロとみなせば、図1に示したように10進数の-7~8を表せます。

真ん中は、表せる数の最小値と最大値を足して2で割って求められます(小数点以下はカットします)。
ここでは、0000+1111=1111を2で割ります。
2進数は、1ビット右シフトすると2で割った値になるので、1111を2で割った値は0111です。
最下位桁から右にはみ出した1が消えるので、小数点以下をカットした値になります。

図1 イクセス表現の0000~1111で表せる数

浮動小数点数に関する問題の例(その1)

浮動小数点数に関する問題を2つ紹介しましょう。
はじめは、符号部、仮数部、指数部に関する問題です。

問題の例その1(出典:H21秋問2)

ア:fを仮数、eを指数、rを基数という
イ:fを基数、eを仮数、rを指数という
ウ:fを基数、eを指数、rを仮数という
エ:fを指数、eを基数、rを仮数という

これまでに示した-101.011=-0.101011×23という例に当てはめてみましょう。
101011に該当するfは仮数部です。3に該当するeは指数部です。
この問題でには符号部がありませんが、その代わりに2に該当するrという基数(重み付の基準の数)があります。
したがって、選択肢アが正解です。

2進数の基数は2に決まっているので、浮動小数点数に基数部という情報はありませんが、この問題では、符号部をアルファベットで示せなかったので、基数を取り上げたのでしょう。

浮動小数点数に関する問題の例(その2)

次は、10進数の小数点数を、決められたビット数の浮動小数点数に置き換える問題です。
ここでは、符号部をイクセス表現ではなく、2の補数表現で表します。
「仮数部の最上位桁が0にならないように指数部と仮数部を調整する」とは、整数部が0で小数点以下1桁目が1になるように桁をずらすということです。

問題の例その2(出典:H18春問4)

数値を図に示す16ビットの浮動小数点形式で表すとき、10進数0.25を正規化した表現はどれか。
ここでの正規化は、仮数部の最上位けたが0にならないように指数部と仮数部を調整する操作とする。

0.25を2進数に変換すると0.01です。
0.01=0.1×2-1なので、符号部が0(プラス)、仮数部が1、指数部が-1です。
それぞれを1ビット、11ビット、4ビットで表すので、指数部は0、仮数部は10000000000、指数部は1111です。
これらを符号部、指数部、仮数部の順に並べるので、浮動小数点数は[0][1111][10000000000]です。
したがって、選択肢ウが正解です。

2の補数表現では「プラスの数を反転して1を足す」とマイナスの数になります。
1を4ビットの2進数で表すと0001です。0001を反転すると1110です。1110に1を足すと1111です。
したがって、-1を4ビットの2の補数表現で表すと1111になります。

基本情報技術者試験の公開問題を見ると、過去に出題された問題の再利用が多いことがわかります。
したがって、試験に合格するために最も効率的で効果的な学習方法は、過去問題を数多く解き、できなかった問題があれば、できるようになるまで練習することです。
もしも、今回取り上げた問題がすぐにできなかったら、できるようになるまで練習してください。

それでは、またお会いしましょう!

label 関連タグ
科目A試験は、
免除できます。
独習ゼミで科目A試験を1年間免除して、科目B試験だけに集中しましょう。
免除試験を受けた 74.9% の方が、
科目A免除資格を得ています。
科目A免除試験 最大 2 回の
受験チャンス !
info_outline
科目A免除試験 最大 2 回の
受験チャンス !
詳しく見てみるplay_circle_filled
label これまでの『やさしい基礎理論』の連載一覧 label 著者