誤差と浮動小数点

chotdekiru/cs-binary-4-floatデータの表し方 - 0と1の世界14コンピュータサイエンス

上から下へ、全 14 枚そのまま並べています。

発表モードで開く

データの表し方 - 0と1の世界

誤差と浮動小数点

〜小数のあつかい〜 コンピュータが小数を表すしくみと、そのクセ

1
1
データの表し方 - 0と1の世界

今日のゴール

このレッスンを終えると、こう言えるようになります。

  • コンピュータは小数を「近い値」で持っている
  • だから小さな誤差(ズレ)が出ることがある
  • お金の計算では、その誤差に注意が必要
2
2
データの表し方 - 0と1の世界

整数はできた、では小数は?

前回までで整数は0と1で表せました。問題はここからです。

  • 整数(1, 2, 3…)はぴったり表せる
  • 小数(0.1, 3.14…)は実はやっかい
  • 0と1だけで小数をどう表すかが今日のテーマ
3
3
データの表し方 - 0と1の世界

2進数での小数表現

10進数の小数点以下が「0.1の位」なら、2進数では「2分の1の位」です。

  • 小数点の右は 1/2, 1/4, 1/8… の位
  • 0.5 は 2進数で 0.1(2分の1)
  • 0.25 は 0.01(4分の1)でぴったり表せる
4
4
データの表し方 - 0と1の世界

固定小数点とは

まずは素朴な方法から見ていきます。

固定小数点(こていしょうすうてん)

小数点の位置をあらかじめ固定して数を表す方式。

例えば下2桁は必ず小数と決める

しくみが単純で分かりやすい

大きい数と小さい数を同時に扱いにくい

5
5
データの表し方 - 0と1の世界

固定小数点と浮動小数点

小数点を「固定」するか「動かす」かで、扱える範囲が変わります。

固定小数点(位置を固定)

特徴
イメージ
小数点の位置が決め打ち
いつも下2桁が小数
しくみが単純
計算が速い
扱える幅がせまい
桁が足りなくなりがち

浮動小数点(位置が動く)

特徴
イメージ
小数点を移動できる
桁を自由に合わせる
広い範囲を表せる
極小〜極大までOK
小さな誤差が出やすい
近い値で記録
6
6
データの表し方 - 0と1の世界

浮動小数点の3つの部品

浮動小数点は、数を3つの部品に分けて記録します。

符号(プラスかマイナスか)
  • 数が+か−かを表す
  • 0と1の1ビットで持つ
指数(小数点の位置)
  • 小数点をどこに動かすか
  • 数の大きさを決める
仮数(数の中身)
  • 数の細かい中身の部分
  • 精度(細かさ)を決める
7
7
データの表し方 - 0と1の世界

たとえ 科学的記数法

浮動小数点は、理科で習う「大きな数の書き方」とそっくりです。

  • 300000000 を 3×10の8乗 と書く
  • 「3」が中身、「8乗」が小数点の位置
  • この発想を2進数でやるのが浮動小数点
8
8
データの表し方 - 0と1の世界

なぜ誤差が出るのか

誤差の正体は「決められた桁数」に収めきれないことです。

  • 記録できる桁数には限りがある
  • 割り切れない数はどこかで打ち切る
  • その打ち切りが小さなズレになる
9
9
データの表し方 - 0と1の世界

0.1 が正確に表せない話

10進数では簡単な0.1も、2進数では割り切れません。

  • 0.1 は2進数だと無限に続く数
  • 1÷3=0.333… と同じく終わらない
  • 0.1+0.2 が 0.3 にならないことがある
10
10
データの表し方 - 0と1の世界

丸め誤差と桁落ち

誤差にはいくつか種類があります。代表的な2つを知っておきましょう。

丸め誤差(まるめごさ)

桁数に収めるため、最後を切り上げ・切り捨てして生じるズレ。

決めた桁で四捨五入するイメージ

桁落ち=近い数の引き算で精度が落ちる

小さな誤差も積み重なると大きくなる

11
11
データの表し方 - 0と1の世界

実務での注意 お金の計算

誤差がいちばん問題になるのは、1円もズレてはいけないお金の計算です。

  • 合計が1円ずれると帳簿が合わない
  • 消費税や割引で端数のズレが出やすい
  • 金額は小数のまま扱わない工夫が必要
12
12
データの表し方 - 0と1の世界

誤差を避ける工夫

誤差はゼロにできなくても、減らしたり避けたりできます。

整数で持つ
  • 金額は「円」でなく「銭」単位
  • 小数を使わず整数で計算
専用の型を使う
  • 誤差が出にくい数の型を選ぶ
  • お金専用のしくみを使う
比較に気をつける
  • 「ぴったり同じ」で比べない
  • 少しの幅を許して判定する
13
13
"

コンピュータは小数を「いちばん近い値」で持っているだけ。 だから0.1のような数でも小さな誤差が出ます。 お金など正確さが命の場面では、整数で扱うなどの工夫が大切です。

データの表し方 第4回 — 誤差と浮動小数点

14
14