対象試験と出題頻度

浮動小数点数は、基本情報技術者・応用情報技術者で出題されるテーマです。

 

正規化の目的を問う知識問題と、10進数を浮動小数点形式に変換する計算問題の2パターンが繰り返し出題されています。固定小数点数との違いを正確に区別できるかもあわせて問われます。

詳細をクリックして確認
対象試験:
基本情報技術者
応用情報技術者
出題頻度:
★★★☆☆
ランクB(標準)覚えておくと有利

用語の定義

情報処理試験を勉強していると、「浮動小数点数って結局どういう仕組み?固定小数点数と何が違うの?」と混乱しがちです。

浮動小数点数(Floating-Point Number)とは、一言で言うと

 「符号・指数・仮数の3要素を使って小数点の位置を動的に変え、非常に大きな数から非常に小さな数まで幅広く表現する方式」

のことです。

イメージとしては、「理科の授業で使う指数表記(科学的記数法)」です。

 

光の速度を「300000000 m/s」と全桁書く代わりに「3.0 × 108 m/s」と書く方法は、日常でも馴染みがあるはずです。浮動小数点数はこの発想をそのまま2進数に適用した表現方式です。「3.0」にあたる部分が仮数、「108」にあたる部分が指数、正負を示す部分が符号。この3つの組み合わせで1つの数値を表します。

📊 浮動小数点数の基本情報

項目 内容
英語名 Floating-Point Number
構成要素 符号部(Sign)・指数部(Exponent)・仮数部(Mantissa / Significand)
代表的な規格 IEEE 754(単精度32ビット / 倍精度64ビット)
対になる方式 固定小数点数(Fixed-Point Number)

解説

固定小数点数は小数点の位置をあらかじめ固定するため、限られたビット数では表現できる範囲が狭くなります。科学技術計算のように天文学的に大きな数や極端に小さな数を扱う場面では、この制約が致命的です。

 

この問題を解決するために考案されたのが浮動小数点数です。小数点の位置を指数部で自由に動かせるため、同じビット数でも桁違いに広い範囲の数値を表現できます。

▶ 浮動小数点数のビット構造を図で確認する(クリックで展開)

IPA試験では16ビットの独自形式が頻出です。以下は「符号1ビット・指数部4ビット・仮数部11ビット」の構成例です。

符号部
(1ビット)
指数部
(4ビット)
仮数部
(11ビット)
s e e e e f f f f f f f f f f f

数値 = (−1)s × 0.f × 2e の形で計算します。sが0なら正、1なら負です。

例えば10進数 0.25 を表す場合、まず2進数に変換すると 0.01 です。これを正規化(後述)して 0.1 × 2−1 とし、符号部=0、指数部=−1(4ビット2の補数で 1111)、仮数部=10000000000 と格納します。

正規化とは何か

浮動小数点数の核となる操作が「正規化」です。正規化とは、仮数部の最上位桁が0以外になるように指数部と仮数部を調整する操作を指します。

 

なぜこの操作が必要かと言うと、仮数部の先頭に無駄な0が並ぶと有効桁数が減り、丸め誤差が大きくなるためです。正規化を行うことで有効桁数を最大に保ち、精度を確保します。

正規化のイメージ(2進数の場合)

正規化前:0.0011 × 20 ← 先頭2桁が無駄な0
正規化後:0.11 × 2−2  ← 最上位桁が1になった

※仮数部を左にシフトした分だけ指数部を小さくして値を一致させる

ここだけは確実に押さえてください。「正規化=仮数部の先頭を0以外にする操作」「目的=有効桁数を最大に保つ」の2点です。

 

IEEE 754 の概要

実務で広く使われている浮動小数点数の規格が IEEE 754 です。単精度(32ビット)と倍精度(64ビット)の2形式があり、プログラミング言語の float 型・double 型はこの規格に基づいています。

形式 全体 符号部 指数部 仮数部 バイアス値
単精度 32ビット 1ビット 8ビット 23ビット 127
倍精度 64ビット 1ビット 11ビット 52ビット 1023

IEEE 754 では正規化後の仮数部が必ず「1.xxxx」の形になるため、先頭の「1.」を省略して格納する(ケチ表現)ことで実質的に1ビット分の精度を稼いでいます。

また、指数部には負の値を避けるためにバイアス値(単精度なら127)を加算して格納します。試験範囲ではこの詳細まで問われることは少ないので、深追いは不要です。

 

固定小数点数との対比

比較項目 固定小数点数 浮動小数点数
小数点位置 固定(事前に決定) 可変(指数部で調整)
表現範囲 狭い 非常に広い
演算速度 高速(整数演算と同等) 相対的に低速
誤差 範囲内なら誤差なし 丸め誤差が発生しうる
構成 符号ビット+数値部 符号部+指数部+仮数部

では、この用語が試験でどのように出題されるか見ていきましょう。

💡 浮動小数点数の核心を3行で

・符号・指数・仮数の3要素で小数点の位置を動的に変え、広い範囲の数値を表現する方式
・正規化は仮数部の最上位桁を0以外にする操作で、目的は有効桁数を最大に保つこと
・固定小数点数が「範囲は狭いが正確」、浮動小数点数は「範囲は広いが誤差あり」と整理する


試験ではこう出る!

浮動小数点数は、基本情報・応用情報のテクノロジ系序盤で繰り返し出題されています。

出題パターンは大きく2つに分かれます。

📊 過去問での出題実績(クリックして表示)
試験回 出題内容 問われたポイント
FE H29春
午前 問2
仮数部の最上位桁が0以外になるように桁合わせする操作の名称を選ぶ問題。 ・「正規化」を即答できるかの一発勝負
・ひっかけ選択肢に「切上げ」「桁上げ」
FE H19春
午前 問4
仮数が正規化されている理由として適切なものを選ぶ問題。 ・正解は「有効数字の桁数を最大に保つ」
・「表現範囲の拡大」はひっかけ
AP H22春
午前 問2
16ビット浮動小数点形式で10進数 0.25 を正規化して表現する問題。 ・10進→2進変換 + 正規化 + 指数部の2の補数をセットで計算
・FE H18春 問4の流用問題
FE H16秋
午前 問4
桁合わせする操作の名称を問う問題(H29春 問2と同一構成の流用)。 ・知識問題のため即答可能
・選択肢の並びが異なるだけ

📝 IPA試験での出題パターン

パターン1:「正規化の定義・目的を問う知識問題」
「仮数部の最上位桁が0以外になるように桁合わせする操作は何か」または「正規化の理由は何か」を選ばせる形式。正解キーワードは「正規化」「有効桁数を最大に保つ」。ひっかけとして「表現範囲の拡大」が紛れ込む(正規化で範囲は変わらない)。

 

パターン2:「10進数を浮動小数点形式に変換する計算問題」
10進数を2進数に変換し、正規化し、符号部・指数部・仮数部に分解してビット列を求める形式。指数部に2の補数を使うかバイアス値を加算するかは問題ごとに異なるので、問題文の指示を必ず読むこと。

 

試験ではここまででOKです。IEEE 754 のケチ表現や非正規化数といった詳細仕様まで問われることはありません。


【確認テスト】理解度チェック

ここまでの内容を理解できたか、簡単なクイズで確認してみましょう。


Q. 浮動小数点表示において、仮数部の最上位桁が0以外になるように桁合わせする操作の目的として、最も適切なものはどれでしょうか?

  • A. 表現可能な数値の範囲を拡大するため。
  • B. 四則演算のアルゴリズムを簡素化するため。
  • C. 有効数字の桁数を最大に保つため。

正解と解説を見る

正解:C

解説:
正規化は仮数部の最上位桁を0以外にすることで、限られたビット数の中で有効桁数を最大限に確保し、丸め誤差を最小限に抑える操作です。FE H19春 午前問4、FE H29春 午前問2で繰り返し問われています。

選択肢Aは誤りです。正規化は仮数部と指数部の配分を調整するだけで、表現可能な数値の範囲そのものは変わりません。選択肢Bも誤りです。正規化は演算アルゴリズムの簡素化を目的とした操作ではなく、精度の維持が目的です。


よくある質問(FAQ)

Q. 浮動小数点数で発生する「丸め誤差」とは具体的に何ですか?

仮数部のビット数に収まりきらない桁が切り捨てられることで生じる誤差です。例えば、10進数の 0.1 は2進数では 0.00011001100110011… と無限に続く循環小数になるため、有限ビットでは正確に表現できず、わずかなずれが発生します。金額計算でこの誤差が積み重なると問題になるため、実務では固定小数点数やプログラミング言語のDecimal型で対処するのが一般的です。

Q. 「情報落ち」「桁落ち」と浮動小数点数の関係は?

どちらも浮動小数点数の演算で発生する精度低下の現象です。情報落ちは、絶対値の差が極端に大きい2数を加減算した際に、小さい方の有効桁が失われること。桁落ちは、ほぼ等しい2数の減算で上位桁が相殺され、有効桁数が大幅に減少すること。IPA試験では浮動小数点数の知識と合わせて出題されることがあるので、用語の区別を把握しておくと安心です。

Q. IEEE 754 の「バイアス値」はなぜ必要なのですか?

指数部に負の値をそのまま格納すると、符号付き整数の比較処理が複雑になります。そこであらかじめバイアス値(単精度なら127)を加算して0以上の値として格納する方式を採用しています。例えば実際の指数が −3 なら、127 + (−3) = 124 を指数部に格納します。検証時は格納値から127を引いて本来の指数を復元します。試験ではバイアス値そのものを暗記する必要はなく、「指数部を符号なしで扱うための補正」という理解で十分です。