基本情報

浮動小数点数をわかりやすく指数部の求め方と計算手順を基本情報の公式問題で確認

更新 ・書いた人 合格ナビ 編集長(運営者)

この記事でわかること

浮動小数点数を符号部・指数部・仮数部に分けて表す手順を、13.625と−0.15625の例で解説。指数部(実際の指数+127)の求め方を逆算で検算し、桁落ち・情報落ち・丸め誤差を基本情報の公式問題で確認します。

目次
  1. 浮動小数点数とは:小数点の位置が動く表し方
  2. 単精度(32ビット)の内訳と、指数部の意味
  3. 計算の手順①:13.625 を単精度の浮動小数点数にする
  4. 計算の手順②:負の数と1より小さい数(−0.15625)
  5. 計算の手順③:ビット列から10進数に戻す(指数部の読み方)
  6. 練習用の小さい形式で、丸め誤差のしくみを確かめる
  7. 誤差の用語:丸め誤差・桁落ち・情報落ち
  8. IPAの公式問題で確認する①:正規化(平成29年度 春期 問2)
  9. IPAの公式問題で確認する②:桁落ち(平成27年度 春期 問2)
  10. IPAの公式問題で確認する③:丸め誤差(令和7年度 科目A 問2)
  11. 浮動小数点の問題で間違えやすい点
  12. まとめ
結論:浮動小数点数は、数を「符号 ×(1.xxx の2進数)× 2の指数乗」の形に直して、符号部・指数部・仮数部の3つに分けて記録する表し方です。単精度(32ビット)は符号1・指数部8・仮数部23ビットで、指数部には「実際の指数 + 127」を書きます。たとえば 13.625 は 1.101101(2進)× 2³ なので、指数部は 3 + 127 = 130 = 10000010 です。計算の手順と誤差の用語(桁落ち・情報落ち・丸め誤差)を押さえれば、基本情報技術者試験の浮動小数点の問題に対応できます。

合格ナビに収録している基本情報技術者試験の問題520問(IPAが公表した平成21年度〜令和7年度の問題とサンプル問題)のうち、浮動小数点数の表し方や誤差そのものを問う問題は4問です(桁落ち・けた落ち2問、正規化1問、丸め誤差1問)。ITパスポート試験の600問(令和3〜8年度)には0問です(2026-10-04 当サイト集計。試験全体での出題頻度ではありません)。

部分役割単精度(32ビット)倍精度(64ビット)
符号部正負(0が正、1が負)1ビット1ビット
指数部2の何乗かを表す(足し算でずらした値)8ビット11ビット
仮数部「1.」の後ろの小数部分23ビット52ビット
指数部に足す値実際の指数に足してから記録する1271023

IPAの基本情報技術者試験シラバス Ver.9.2は、「数値の表現」の用語例に固定小数点数・単精度浮動小数点数・倍精度浮動小数点数・仮数・指数を、「算術演算と精度」の用語例に桁落ち・情報落ち・オーバーフロー・アンダーフロー・単精度・倍精度を挙げています(IPA 基本情報技術者試験 シラバス Ver.9.2 大分類1 中分類1「基礎理論」の1.離散数学)。

浮動小数点数とは:小数点の位置が動く表し方

私たちが普通に書く 123000 を「1.23 × 10⁵」と書くやり方(科学的記数法)を、2進数でやったものが浮動小数点数です。10進数の「× 10の何乗」の部分が、2進数では「× 2の何乗」に変わります。

10進数の科学的記数法2進数の浮動小数点
123000 = 1.23 × 10⁵1101.101 = 1.101101 × 2³
符号・「1.23」・「5」の3つで数を表す符号・「1.101101」・「3」の3つで数を表す
「1.23」を仮数、「5」を指数と呼ぶ仮数部・指数部に分けて記録する

「浮動」は、小数点の位置が指数によって動く(浮いている)ことを指します。反対に、小数点の位置を最初から決めておく表し方を固定小数点数と呼びます。固定小数点数は整数部と小数部のけた数が決まっているので、とても大きな数やとても小さな数を同時には扱えません。浮動小数点数は、指数を使って位置を動かすことで、広い範囲の数を同じビット数で表せます。そのかわり、仮数部のけた数には限りがあるので、数によっては誤差が生じます(後半の「誤差の用語」で扱います)。

数を「符号・仮数・指数」に分けるので、浮動小数点の問題は次の流れで解けます。

  • ① 10進数を2進数に直す(整数部・小数部を別々に)
  • ② 小数点を動かして「1.xxx」の形にそろえる(これが正規化)
  • ③ 動かした桁数が指数になる。指数に127(単精度)を足したものが指数部
  • ④ 「1.」の後ろ(xxx)を仮数部に書き、残りを0で埋める
  • ⑤ 符号部(正は0、負は1)を先頭に付ける

この論点の過去問を解く

単精度(32ビット)の内訳と、指数部の意味

単精度の32ビットは、先頭から符号部1ビット・指数部8ビット・仮数部23ビットに分かれます。このビット配置は、Javaの公式ドキュメントが「IEEE 754 の単精度(single format)のビット配置」として次のように定めています(Oracle Java SE 21 API Float.intBitsToFloat)。

  • 符号 s = 先頭の1ビット(0なら正、1なら負)
  • 指数部 e = 次の8ビットを整数にしたもの
  • 仮数 m = 残り23ビットの先頭に「1」を付けた24ビットの整数(指数部が0のときは付けない)
  • 値 = s × m × 2^(e − 150)

最後の式は、m を「1.xxx」の小数にして書き直すと分かりやすくなります。m は 1.xxx の小数点を23桁右へ動かした整数(1.xxx × 2²³)なので、値 = s × (1.xxx) × 2²³ × 2^(e − 150) = s × (1.xxx) × 2^(e − 127) です。つまり、実際の指数は「指数部の値 − 127」で、記録するときは逆に「実際の指数 + 127」を書きます。

指数部に127を足す理由は、指数がマイナスになる数(1より小さい数)を、符号なしの整数として記録するためです。

実際の指数指数部の値(+127)指数部のビット列どんな数か
−3124011111001/8 ≦ x < 1/4(例:0.15625)
0127011111111 ≦ x < 2
3130100000108 ≦ x < 16(例:13.625)
41311000001116 ≦ x < 32(例:25)

指数部が全部0のときは、Javaの公式ドキュメントが仮数の先頭に「1」を付けない扱いにしています。全部1(255)のときは、無限大や NaN(数でない値)に使われます(同ドキュメントは、ビット列が 0x7f800000 なら正の無限大、0x7f800001〜0x7fffffff なら NaN と定めています)。ふつうの数を表すのは、指数部が 1〜254(実際の指数が −126〜127)のときです。

この論点の過去問を解く

計算の手順①:13.625 を単精度の浮動小数点数にする

整数部と小数部に分けて、手順どおりに進めます。当サイトが選んだ数で計算します。

手順① 2進数にする

整数部 13 は 8 + 4 + 1 なので 1101。小数部 0.625 は 0.5 + 0.125 なので 0.101(0.625 × 2 = 1.25 → 1、0.25 × 2 = 0.5 → 0、0.5 × 2 = 1.0 → 1 と整数部を取り出していく方法でも 0.101 になります)。合わせて 1101.101 です。

手順② 正規化する

小数点を左へ3桁動かして 1.101101 × 2³ にします。「1.xxx」の形にそろえる操作を正規化と呼びます。

手順③ 指数部を求める

動かした桁数が指数で、3 です。3 + 127 = 130。130 を2進数にすると 128 + 2 なので 10000010 です。

手順④ 仮数部を求める

1.101101 の「1.」の後ろ、101101 を先頭から並べ、残りを0で埋めて23ビットにします。10110100000000000000000(101101 + 0が17個)です。

手順⑤ 符号部を付けて並べる

正の数なので符号部は 0。

符号部指数部仮数部
01000001010110100000000000000000

4ビットずつに区切ると 0100 0001 0101 1010 0000 0000 0000 0000 で、16進数では 415A0000 です。

手順⑥ 2通りで検算する

  • 検算1(逆算):仮数部に「1.」を戻すと 1.101101(2進)= 1 + 45/64 = 109/64。指数部 130 − 127 = 3 なので、109/64 × 2³ = 109/8 = 13.625 に戻ります
  • 検算2(機械で確認):Python の struct モジュールで 13.625 を単精度に詰めると 415A0000 となり、手計算と一致しました(2026-10-04 当サイト確認)

計算の手順②:負の数と1より小さい数(−0.15625)

符号が負で、指数もマイナスになる例です。−0.15625 を単精度にします。

  • ① 2進数にする:0.15625 = 5/32 = 0.00101(0.15625 × 2 = 0.3125 → 0、× 2 = 0.625 → 0、× 2 = 1.25 → 1、0.25 × 2 = 0.5 → 0、× 2 = 1.0 → 1)
  • ② 正規化:小数点を右へ3桁動かして 1.01 × 2⁻³(右へ動かすので指数はマイナス)
  • ③ 指数部:−3 + 127 = 124 = 01111100
  • ④ 仮数部:「1.」の後ろの 01 + 0が21個
  • ⑤ 符号部:負の数なので 1
符号部指数部仮数部
10111110001000000000000000000000

16進数では BE200000 です。

  • 検算1(逆算):1.01(2進)= 1 + 1/4 = 5/4。指数部 124 − 127 = −3 なので、5/4 × 2⁻³ = 5/32 = 0.15625。符号部が1なので −0.15625 に戻ります
  • 検算2(機械で確認):Python の struct モジュールで −0.15625 を単精度に詰めると BE200000 で、手計算と一致しました

負の数のとき、指数部の符号は変わりません。 負の数を表すのは先頭の符号部1ビットだけで、指数がマイナスかどうかは「指数部が127より小さいか」で決まります。

この論点の過去問を解く

計算の手順③:ビット列から10進数に戻す(指数部の読み方)

指数部の求め方の逆向きです。次のビット列(16進数 41C80000)が表す値を求めます。

符号部指数部仮数部
01000001110010000000000000000000
  • ① 符号部が0なので正の数
  • ② 指数部 10000011 は 128 + 2 + 1 = 131。実際の指数は 131 − 127 = 4
  • ③ 仮数部の先頭に「1.」を付けて 1.1001(2進)= 1 + 1/2 + 1/16 = 25/16
  • ④ 25/16 × 2⁴ = 25

検算は、25 を 2進数 11001 にして正規化すると 1.1001 × 2⁴ なので、指数部は 4 + 127 = 131 = 10000011、仮数部は 1001 + 0が19個となり、元のビット列に一致します(Python の struct でも 41C80000 = 25.0 を確認)。

倍精度(64ビット)でも手順は同じで、違うのは指数部が11ビット、足す値が1023、仮数部が52ビットという点だけです。13.625 を倍精度にすると、指数 3 + 1023 = 1026 = 10000000010、仮数部は 101101 の後ろを0で埋めた52ビットで、16進数では 402B400000000000 です(Javaの公式ドキュメントの倍精度の式 値 = s × m × 2^(e − 1075)、m は52ビットに「1」を付けた53ビットの整数、から 1075 − 52 = 1023 を確認。Oracle Java SE 21 API Double.longBitsToDouble)。

練習用の小さい形式で、丸め誤差のしくみを確かめる

ここまでの数は、仮数部に収まるすべての桁が0だったので、きれいに表せました。仮数部に収まらない数はどうなるのかを、ビット数を減らした練習用の形式で確かめます。この形式は当サイトが理解のために作ったもので、IEEE 754 の形式でも、試験の問題の形式でもありません。

  • 符号部 1ビット、指数部 4ビット(足す値は 7)、仮数部 3ビット(「1.」は記録しない)
数正規化指数部仮数部ビット列戻した値
6.51.101 × 2²2 + 7 = 9 = 10011010 1001 101(1 + 5/8) × 4 = 6.5
0.751.1 × 2⁻¹−1 + 7 = 6 = 01101000 0110 1001.5 × 1/2 = 0.75
13.6251.101101 × 2³3 + 7 = 10 = 10103桁に収まらない(101101)0 1010 110(切り上げた場合)(1 + 6/8) × 8 = 14

13.625 は仮数部が 101101 と6桁あり、この形式の3桁には入りません。3桁目より後ろの部分(残りの 101、つまり最後の桁の0.625個分)は最後の桁の半分より大きいので、四捨五入に当たる丸めで切り上げると、仮数部は 110(1.110 = 1.75)になります。1.75 × 2³ = 14 なので、13.625 が 14 として記録され、0.375 の誤差が生じました。 これが丸め誤差です。切り捨てなら 1.101(1.625 × 8 = 13)になり、誤差は 0.625 です。丸め方によって結果が変わります。

仮数部のけた数に限りがある以上、2進数で割り切れない数は、どれだけ桁を増やしても必ず端数が出ます。10進数の 0.1 が代表例です。Python の公式ドキュメントは、10進数の小数の多くは2進数の小数で正確に表せないと説明し、1/10 は 0.0001100110011001100110011… と無限に続く2進小数になると書いています(Python 公式ドキュメント 15. Floating-Point Arithmetic: Issues and Limitations)。単精度の 0.1 は実際には 0.10000000149011612 が記録されています(16進数 3DCCCCCD、Python の struct で確認)。

誤差の用語:丸め誤差・桁落ち・情報落ち

シラバスの用語例に挙がっている誤差は、起きる場面で見分けます。

用語起きる場面この記事の例
丸め誤差記録できる桁数に限りがあり、最下位の桁より下を四捨五入・切上げ・切捨てする練習用の形式で 13.625 が 14 になる
桁落ち値がほぼ等しい数どうしの引き算で、有効桁数が大きく減る下の 1.234 − 1.233
情報落ち絶対値が大きく違う数の足し算で、小さいほうの数の下位の桁が結果に反映されない(差が大きいと全部消える)単精度で 16777216 + 1 が 16777216 のまま
オーバーフロー結果が扱える最大値を超える単精度の最大値は約 3.4 × 10³⁸

桁落ちの例(有効数字4桁)

本当の値が 1.23449 と 1.23251 のとき、有効数字4桁で記録すると 1.234 と 1.233 になります。引き算の結果は 1.234 − 1.233 = 0.001 で、本当の差 0.00198 とは約49.5%(0.00098 ÷ 0.00198)もずれます。上位の桁が引き算で消えたため、4桁あった有効数字が1桁に減りました。

情報落ちの例(単精度)

単精度の仮数部は「1.」を含めて24ビットなので、2²⁴ = 16,777,216 を超えると、表せる整数は1刻みではなく2刻みになります。16,777,216 + 1 を単精度で計算すると、結果は 16,777,216 のままです。16,777,216 + 2 なら 16,777,218 になります(どちらも Python の struct で単精度に直して確認)。大きい数に小さい数を足したときの、小さいほうの情報が落ちるのがこの現象です。

この論点の過去問を解く

IPAの公式問題で確認する①:正規化(平成29年度 春期 問2)

問題(逐語引用)

問2 0 以外の数値を浮動小数点表示で表現する場合,仮数部の最上位桁が 0 以外になるように,桁合わせする操作はどれか。ここで,仮数部の表現方法は,絶対値表現とする。
ア 切上げ イ 切捨て ウ 桁上げ エ 正規化

出典:平成29年度 春期 基本情報技術者試験 午前 問2(独立行政法人情報処理推進機構)。

IPAの問題PDFと解答例PDFに、問題文と選択肢、正解がエであることが載っています。

  • 「仮数部の最上位桁が0以外になるように桁合わせする」とは、この記事の手順②「1.xxx の形にそろえる」と同じ操作です。2進数では、仮数の最上位の桁が1になるようにそろえることを指します
  • 切上げ・切捨ては、端数の処理(丸め)の方法です。桁上げは、足し算で上の桁へ繰り上がる動きです。小数点を動かして桁をそろえる操作は正規化だけです
  • 検算:13.625 の 1101.101 を正規化すると、この記事の形では 1.101101 × 2³ になり、仮数の最上位桁が0以外(1)になります。仮数を「小数点の直後が最上位桁」の形で書く流儀では 0.1101101 × 2⁴ となり、これも最上位桁が1なので正規化された形です。どちらの形でも、最上位の1を決まった位置に置く操作は同じです。0.01101101 × 2⁵ のように、最上位桁が0のままの形は正規化されていません(値はどれも 13.625 です)。形式は問題文の指定に従います

IPAの公式問題で確認する②:桁落ち(平成27年度 春期 問2)

問題(逐語引用)

問2 桁落ちの説明として,適切なものはどれか。
ア 値がほぼ等しい浮動小数点数同士の減算において,有効桁数が大幅に減ってしまうことである。
イ 演算結果が,扱える数値の最大値を超えることによって生じるエラーのことである。
ウ 浮動小数点数の演算結果について,最小の桁よりも小さい部分の四捨五入,切上げ又は切捨てを行うことによって生じる誤差のことである。
エ 浮動小数点数の加算において,一方の数値の下位の桁が結果に反映されないことである。

出典:平成27年度 春期 基本情報技術者試験 午前 問2(独立行政法人情報処理推進機構)。

IPAの問題PDFと解答例PDFに、問題文と選択肢、正解がアであることが載っています。

  • 桁落ちは「値がほぼ等しい数どうしの引き算で有効桁数が減る」現象で、上の桁落ちの例(1.234 − 1.233)と同じです。ア
  • イはオーバーフロー、ウは丸め誤差の説明です。エは、足し算で小さいほうの数の下位の桁が結果に反映されない現象で、情報落ち(上の16,777,216 + 1 の例)に当たる内容です
  • 同じ趣旨の問題が平成22年度 秋期 問2(「けた落ち」の表記、正解ア)でも出題されています(IPAの問題PDF・解答例PDFで確認)

IPAの公式問題で確認する③:丸め誤差(令和7年度 科目A 問2)

問題(逐語引用)

問2 浮動小数点形式で表現された数値の演算結果における丸め誤差の説明はどれか。
ア 演算結果がコンピュータの扱える最大値を超えることによって生じる誤差である。
イ 数表現のけた数に限度があるので,最下位けたより小さい部分について四捨五入や切上げ,切捨てを行うことによって生じる誤差である。
ウ 乗除算において,指数部が小さい方の数値の仮数部の下位部分が失われることによって生じる誤差である。
エ 絶対値がほぼ等しい数値の加減算において,上位の有効数字が失われることによって生じる誤差である。

出典:令和7年度 基本情報技術者試験 科目A 公開問題 問2(独立行政法人情報処理推進機構)。

IPAの問題PDFと解答例PDFに、問題文と選択肢、正解がイであることが載っています。

  • 丸め誤差は「けた数に限度があるので、最下位より下を四捨五入・切上げ・切捨てする」ことで生じる誤差で、この記事の練習用の形式で 13.625 が 14 になった例がそれです。イ
  • アはオーバーフロー、エは桁落ちの説明です。ウは「乗除算」「指数部が小さいほうの仮数部の下位が失われる」という別の場面の説明で、けた数の限度による端数の処理(四捨五入・切上げ・切捨て)ではありません

浮動小数点の問題で間違えやすい点

当サイトで手計算と検算を繰り返して、取り違えやすかった点です。

  • ① 指数部に127を足し忘れる:実際の指数 3 をそのまま 00000011 と書くと、読み戻すときに 3 − 127 = −124 となり、値が大きくずれます
  • ② 仮数部に「1.」まで書いてしまう:IEEE 754 の単精度では「1.」は記録せず、読み戻すときに戻します。ただし、問題文で形式が違うと示されたら、その形式に従います
  • ③ 小数点を動かす向きと指数の正負を逆にする:左へ動かすと指数はプラス、右へ動かすとマイナスです。1.01 × 2⁻³ は 0.00101 を右へ3桁動かしてできます
  • ④ 負の数の指数部をマイナスにする:負の数でも変わるのは符号部だけです
  • ⑤ 誤差の3用語を混同する:「引き算で桁が減る」は桁落ち、「大小の差が大きい足し算で小さいほうが消える」は情報落ち、「端数の四捨五入・切上げ・切捨て」は丸め誤差です

この論点の過去問を解く

まとめ

  • 浮動小数点数は「符号 ×(1.xxx)× 2の指数乗」。符号部・指数部・仮数部に分けて記録する。固定小数点数は小数点の位置を決めておく表し方
  • 単精度は符号1・指数部8・仮数部23ビットで、指数部には「実際の指数 + 127」を書く。倍精度は11ビット・52ビットで、足す値は1023
  • 計算は「2進数にする→正規化→指数部を求める→仮数部を切り出す→符号部を付ける」。検算は逆算(指数部 − 127、「1.」を戻す)で行う
  • 13.625 は 0 10000010 10110100000000000000000(415A0000)、−0.15625 は 1 01111100 01000000000000000000000(BE200000)
  • 誤差は、丸め誤差(端数の処理)・桁落ち(ほぼ等しい数の引き算)・情報落ち(大小の差が大きい足し算)で見分ける。0.1 のように2進数で割り切れない数は、記録するたびに丸められる
  • 2の補数による負の整数の表し方は2の補数の計算方法と表現範囲で扱っている

よくある質問

Q指数部に127を足すのはなぜですか?

指数部は符号なしの整数として記録するため、マイナスの指数(0.15625 なら −3)をそのまま書けません。そこで、実際の指数に決まった値を足して0以上にしてから記録します。単精度では127を足すので、指数 −3 は 124(01111100)、指数 3 は 130(10000010)になります。Javaの公式ドキュメントが示す単精度の計算式(値 = 符号 × m × 2^(e − 150)、m は「1.」を含む24ビットの整数)を変形すると、(1.xxx) × 2^(e − 127) となり、指数部 e から127を引いたものが実際の指数であることが確認できます。

Q仮数部に「1.」を書かないのはなぜですか?

正規化した数は必ず「1.xxx」の形になり、整数部は必ず1だからです。毎回同じ1を記録するのは無駄なので、小数点以下の xxx だけを仮数部に書き、計算するときに「1.」を戻します。単精度の仮数部は23ビットですが、この1を足すと実質24ビット分の精度になります。ただし、試験の問題では形式が問題文で与えられるので、「1.」を省くかどうかも問題文の記述に従ってください。

Q浮動小数点数の計算で、基本情報技術者試験に計算問題は出ますか?

当サイトに収録している基本情報技術者試験の問題520問(公開問題とサンプル問題)では、浮動小数点数を問う4問は、桁落ち・丸め誤差の説明を選ぶ問題と、正規化の操作を選ぶ問題でした(2026-10-04 当サイト集計)。この記事のようなビット列への変換は、形式が問題文で与えられたときの考え方として役立ちます。試験全体での出題頻度ではない点に注意してください。

Qfloat と double はどちらを使えばよいですか?

試験ではどちらも出題の対象で、シラバスの用語例に「単精度浮動小数点数」「倍精度浮動小数点数」が挙がっています。違いは桁数です。単精度は仮数部23ビット、倍精度は52ビットで、倍精度のほうが精度と表せる範囲が大きくなります。プログラムでどちらを選ぶかは用途の問題なので、この記事では扱いません。

この資格の問題を解く基本情報技術者(FE) 科目A過去問問題集(全520問)
解いてみる

法令や試験の数字は、改正や年度で変わります。この記事の最終確認日は2026年10月4日です。申込みや合格基準は、必ず試験団体の公式情報で確かめてください。

合格ナビ 編集長・運営者

基本情報技術者(FE)の出題範囲・法令・公式の統計を参照して書いています。プロフィール・編集方針