資格道場 › レッスン一覧 › 基礎理論
基礎理論・4/13・11分

浮動小数点数と計算誤差

ゴール

浮動小数点数の「仮数・指数・基数」と正規化を説明でき、桁落ち・情報落ち・丸め誤差の説明文と対策を見分けられる。0.25 を正規化した表現と、相対誤差の大小を自力で求められる。

コンピュータは小数を有限の桁数で表すので、計算すると必ず少しずれます。科目Aではこのずれ方を表す4つの用語を入れ替えた選択肢がよく出て、免除試験では毎回のように1問出ています。用語の区別さえ覚えれば確実に取れる問題です。

このレッスンで稽古する(用語チェック・過去問)

結論:誤差の用語は「どんな計算で起きるか」で見分ける

このレッスンの得点源は次の3つです。

  • 桁落ち:ほぼ同じ値どうしの引き算で、有効桁が一気に減る
  • 情報落ち:大きい数と小さい数の足し算・引き算で、小さい方が結果から消える
  • 丸め誤差:桁数に限りがあるため、最下位桁より下を四捨五入・切上げ・切捨てして生じるずれ

この3つと、オーバフロー(最大値を超える)・打切り誤差を入れ替えて選択肢を作るのが定番です。まず数の表し方を押さえ、そのあとで誤差を区別します。

浮動小数点数=「仮数 × 基数^指数」

浮動小数点数は、実数を a = f × r^e の形で表す方法です。電卓の「1.5E+8」(1.5×10^8)と同じ考え方で、小数点の位置を指数で動かせるので、とても大きい数も小さい数も同じ桁数で扱えます。

記号 名前 役割 1.5×10^8 の場合
f 仮数(かすう) 数字の並び(精度を決める) 1.5
r 基数(きすう) 何を何乗するかの底。コンピュータでは普通 2 10
e 指数(しすう) 小数点を何桁動かすか 8

覚え方:「仮の数字に、基を、指数乗」。f・r・e の順に「仮数・基数・指数」です。

正規化とは、仮数部の最上位桁が 0 以外になるように指数と仮数を調整することです。0.0012×10^0 を 0.12×10^−2 に直すと、先頭の無駄な 0 が消え、限られた桁を有効数字に使えます。2進数なら「最上位桁を 1 にする」のと同じ意味です。

指数が負のときは、問題文で指定された方法(よく出るのは 2の補数)で表します。2の補数は「ビットを全部反転して 1 を足す」と作れます。

正規化:先頭の0を消して桁を有効に使う0.0012×10^0(正規化前)0.0012先頭の0で2桁ムダ指数を−2して左へ詰める0.12×10^−2(正規化後)0.12使える使える全4桁を有効数字に使える
仮数部が4桁の場合の例。0.0012×10^0 では先頭の0が2桁ムダになるが、正規化して 0.12×10^−2 にすると4桁すべてを有効数字に使える。

4つの誤差の比較表(ここが最重要)

用語 起きる計算 何が起きるか 対策・キーワード
情報落ち 絶対値が大きく違う数の加減算 小さい方の下位桁が結果に反映されない 絶対値の小さい順に足す
桁落ち 絶対値がほぼ等しい数の減算(同符号の引き算・異符号の足し算) 上位桁が打ち消し合い、有効桁数が大幅に減る ほぼ等しい数の引き算を避けるよう式を変形する
丸め誤差 桁数の限界を超えたとき(あらゆる計算・変換) 最下位桁より下を四捨五入・切上げ・切捨てしたずれ 桁数を増やすしかない。ゼロにはできない
オーバフロー 結果が大きすぎるとき 扱える最大値を超える 誤差というよりエラー
打切り誤差 無限に続く計算を途中で止めたとき 計算を打ち切った分のずれ 計算の回数・項数を増やす
アンダフロー 結果が 0 に近すぎるとき 表せる最小の絶対値より小さくなる —

選択肢の説明文は、次の順に当てはめると迷いません。

選択肢を読むときの判定手順

flowchart TD
  Q["選択肢の説明を読む"] --> A{"扱える最大値を超えた?"}
  A -->|"はい"| O["オーバフロー"]
  A -->|"いいえ"| B{"ほぼ等しい数の引き算?"}
  B -->|"はい"| K["桁落ち"]
  B -->|"いいえ"| C{"大きい数と小さい数の足し引き?"}
  C -->|"はい"| J["情報落ち"]
  C -->|"いいえ"| D{"最下位桁より下を四捨五入・切捨て?"}
  D -->|"はい"| M["丸め誤差"]
  D -->|"いいえ"| U["打切り誤差など他を疑う"]

情報落ち:小さい数が「消える」(免除12回・最頻出)

たとえば有効桁が4桁だとすると、1000 + 0.1 は 1000.1 ですが、5桁目以降は持てないため結果は 1000 のままです。小さい方の数が足した意味を失う現象が情報落ちです。トラックの重さを量る台に1円玉を載せても目盛りが変わらないのと同じです。

対策は「絶対値の小さい順に足す」。小さい数どうしを先に足してある程度の大きさにしておけば、大きい数に足したときに消えずに残ります。

  • 出題パターン①:「小さいものから順番に足すのは何を抑えるためか」→ 情報落ち
  • 出題パターン②:「情報落ちを防ぐ工夫は」→ 絶対値の小さい順。「大きい順」は逆に悪化させるひっかけです
  • 「ほぼ等しい異符号どうしの加算を減らす」は桁落ちの対策なので、情報落ちの答えにはなりません
有効桁4桁で 1000 + 0.11000.0+0.11000×点線の中=持てる4桁はみ出て消える結果は 1000 のまま=情報落ち
有効桁4桁で 1000 + 0.1 を計算すると、0.1 は持てる4桁の外にはみ出して切り捨てられ、結果は 1000 のまま(情報落ち)。

桁落ち:引き算で有効桁が「減る」(本試験2回・免除8回)

有効桁5桁の 1.2345 と 1.2344 の差は 0.0001 です。上の4桁が打ち消し合い、意味のある数字は 1桁だけになります。これが桁落ちで、元の値の小さな誤差が結果の中で急に大きな割合を占めるようになります。

起きる条件は「絶対値がほぼ等しく、同符号どうしの減算」(異符号どうしの加算も実質同じ)です。

情報落ちとの違いは、桁落ち=似た数の引き算で桁が減る/情報落ち=大小の差がある数の足し引きで小さい方が消えるです。名前が似ていても起きる計算がまったく違います。

有効桁5桁:1.2345 − 1.23441.2345−1.23440.0001上4桁が打ち消し合って0に意味ある桁は1つ5桁あった有効桁が1桁に=桁落ち
有効桁5桁の 1.2345 − 1.2344 = 0.0001 では、上の4桁が打ち消し合い、意味のある数字は1桁だけになる(桁落ち)。

丸め誤差:桁数の限界で必ず生じる(本試験2回・免除4回)

数を決まった桁数に収めるため、最下位桁より下を四捨五入・切上げ・切捨てしたときに生じるずれが丸め誤差です。10進の 0.1 は2進数では割り切れず無限に続くので、どこかで丸めた時点で誤差が生じます。

アナログ電圧をディジタル化すると、部品精度・温度変化・雑音の影響は受けにくくなります。ただし、変換誤差や丸め誤差がなくなるわけではありません。「誤差が発生しない」「遅延がない」と言い切る選択肢は誤りです。

相対誤差:誤差を真の値で割る(本試験1回)

相対誤差 = |近似値 − 真の値| ÷ 真の値 です。誤差の大きさそのもの(絶対誤差)ではなく、元の値に対して何割ずれたかで比べます。絶対誤差の大小で並べると逆の順になるよう作られた選択肢に注意してください。

例題 1

10進数 0.25 を16ビット浮動小数点で正規化する

図に示す 16 ビットの浮動小数点形式において,10 進数 0.25 を正規化した表現はどれか。ここで,正規化は仮数部の最上位桁が 1 になるように指数部と仮数部を調節する操作とする。
16 ビット形式: 左から s(1 ビット)|e(4 ビット)|f(11 ビット)。小数点の位置は e と f の間。s:仮数部の符号(0:正,1:負),e:指数部(2 を基数とし,負数は 2 の補数で表現),f:仮数部(符号なし 2 進数)

ア [図] s=0,e=0001,f=10000000000
イ [図] s=0,e=0010,f=10000000000
ウ [図] s=0,e=1001,f=10000000000
エ [図] s=0,e=1111,f=10000000000

出典:基本情報技術者試験 科目A免除 修了試験 20130728 実施分 問4

解き方と答えを見る
  1. 形式を確認する:s(符号1ビット)|e(指数4ビット・2の補数)|f(仮数11ビット)。小数点は e と f の間にあるので、仮数は「0.f」の形。正規化の条件は「仮数の最上位桁を 1 にする」。
  2. 0.25 を2進数にする:0.25 = 1/4 = 2^(−2) なので、0.25(10) = 0.01(2)。
  3. 仮数の最上位桁が 1 になるよう小数点を1桁右へずらす:0.01(2) = 0.1(2) × 2^(−1)。よって仮数 f = 1 のあとに 0 が続く形で 10000000000、指数 e = −1。
  4. 指数 −1 を4ビットの2の補数にする:+1 = 0001 → ビットを反転して 1110 → 1 を足して 1111。
  5. 符号は正なので s = 0。まとめると s=0、e=1111、f=10000000000。

答え:エ(s=0,e=1111,f=10000000000)。e=0001 は指数を +1 と取り違えた場合、e=1001 は負数を2の補数にせず符号ビットだけ立てた場合のひっかけ。

例題 2

相対誤差の小さい順に並べる

三つの実数 X~Z とそれぞれの近似値が次の場合,相対誤差の小さい順に並べたものはどれか。
真の値近似値
X1.021
Y1.972
Z5.055

ア X, Y, Z
イ Y, Z, X
ウ Z, X, Y
エ Z, Y, X

出典:平成23年度 特別試験 基本情報技術者試験 午前 問2

解き方と答えを見る
  1. 式:相対誤差 = |近似値 − 真の値| ÷ 真の値。
  2. X:|1 − 1.02| ÷ 1.02 = 0.02 ÷ 1.02 ≒ 0.0196
  3. Y:|2 − 1.97| ÷ 1.97 = 0.03 ÷ 1.97 ≒ 0.0152
  4. Z:|5 − 5.05| ÷ 5.05 = 0.05 ÷ 5.05 ≒ 0.0099
  5. 小さい順に並べる:Z(0.0099)< Y(0.0152)< X(0.0196)。

答え:エ(Z, Y, X)。絶対誤差(X 0.02・Y 0.03・Z 0.05)で並べると逆の順のア(X, Y, Z)になるひっかけ。

要点(試験直前に読む)

  • a=f×r^e:f=仮数、r=基数、e=指数(仮・基・指の順)。
  • 正規化=仮数の最上位桁を 0 以外(2進なら 1)にすること。0.25=0.1(2)×2^(−1)、−1 は4ビットの2の補数で 1111。
  • 桁落ち=ほぼ等しい数の引き算で有効桁が激減する。
  • 情報落ち=大きい数と小さい数の足し引きで小さい方が消える。対策は絶対値の小さい順に足す。
  • 丸め誤差=最下位桁より下の四捨五入・切上げ・切捨て。ディジタル化してもゼロにはならない。
  • 相対誤差=|近似値−真の値|÷真の値。絶対誤差の順とは逆になりうる。

ひっかけ

  • 「最大値を超える」はオーバフロー、「最下位桁より下の四捨五入」は丸め誤差、「ほぼ等しい数の減算」は桁落ち、「一方の下位桁が反映されない」は情報落ち。説明文の中の計算の種類で決める。
  • 情報落ちの対策で「大きい順に足す」は逆効果。「ほぼ等しい異符号の加算を減らす」は桁落ちの対策なので、情報落ちの答えにはならない。
  • 正規化の選択肢に「切上げ・切捨て・桁上げ」が並ぶ。桁合わせで最上位を 0 以外にするのは正規化だけ。
  • 負の指数を2の補数で表すとき、符号ビットだけ立てた 1001 や、+1 の 0001 を選ばせる。反転して +1 で 1111 になる。
  • 相対誤差の並べ替えでは、絶対誤差の順に並べた選択肢が必ず用意されている。真の値で割るのを忘れない。

用語(15)

浮動小数点数 ふどうしょうすうてんすう
実数を「仮数×基数^指数」の形で表し、指数で小数点の位置を動かせるようにした数の表し方。
⚠ 固定小数点数は小数点の位置が決まっている。広い範囲の値を表せるのが浮動小数点数。
仮数 かすう
a=f×r^e の f にあたり、数字の並び(精度)を表す部分。
⚠ 基数(r:底)・指数(e:何乗するか)と入れ替えた選択肢が出る。f・r・e=仮数・基数・指数の順で覚える。
指数 しすう
a=f×r^e の e にあたり、基数を何乗するか(小数点を何桁動かすか)を表す部分。
⚠ 負の指数は2の補数などで表すことがある。符号ビットを立てるだけの表し方と区別する。
基数 きすう
a=f×r^e の r にあたる累乗の底で、コンピュータでは通常 2。
⚠ 仮数と字面が似ている。「基=ベース(底)」と覚える。
正規化 せいきか
仮数部の最上位桁が 0 以外(2進なら 1)になるように指数と仮数を調整すること。
⚠ 切上げ・切捨て(丸め)や桁上げ(足し算の繰り上がり)とは別物。
2の補数 にのほすう
ビットを全部反転して 1 を足すことで負の数を表す方法。
⚠ 最上位ビットだけを 1 にする「符号+絶対値」表現と取り違えない(−1 は 1001 ではなく 1111)。
有効桁数 ゆうこうけたすう
数値のうち、意味のある(信頼できる)数字の桁数。
桁落ち けたおち
絶対値がほぼ等しい数どうしの減算で上位桁が打ち消し合い、有効桁数が大幅に減ること。
⚠ 情報落ちは大小の差がある数の加減算で小さい方が消える現象。桁落ちは「似た数の引き算」。
情報落ち じょうほうおち
絶対値の大きい数と小さい数を足し引きしたとき、小さい方の桁が結果に反映されないこと。
⚠ 桁落ちと混同しやすい。「小さい順に足す」が対策なら情報落ち。
丸め誤差 まるめごさ
桁数に限りがあるため、最下位桁より下を四捨五入・切上げ・切捨てして生じる誤差。
⚠ 打切り誤差は無限に続く計算を途中で止めた誤差。丸めは「端数処理」、打切りは「計算を途中でやめる」。
オーバフロー overflow
演算結果が、扱える数値の最大値を超えてしまうこと。
⚠ 「最大値を超える」とあればこれ。桁落ち・丸め誤差の選択肢に混ぜられる。
アンダフロー underflow
演算結果の絶対値が、表せる最小の値より小さくなってしまうこと。
⚠ オーバフローの逆。情報落ちとは別の現象。
打切り誤差 うちきりごさ
無限に続く計算(級数など)を途中で打ち切ったために生じる誤差。
⚠ 丸め誤差(端数処理)と混同させる選択肢として出る。
絶対誤差 ぜったいごさ
近似値と真の値の差の絶対値。
⚠ 相対誤差はこれを真の値で割ったもの。並べ替え問題では順番が逆になりやすい。
相対誤差 そうたいごさ
|近似値−真の値|÷真の値で求める、真の値に対する誤差の割合。
⚠ 絶対誤差で比べると答えが変わる。必ず真の値で割る。

このレッスンの過去問

このレッスンで稽古する