誤差と浮動小数点
chotdekiru/cs-binary-4-floatデータの表し方 - 0と1の世界14 枚コンピュータサイエンス
上から下へ、全 14 枚そのまま並べています。
発表モードで開く誤差と浮動小数点
今日のゴール
このレッスンを終えると、こう言えるようになります。
- コンピュータは小数を「近い値」で持っている
- だから小さな誤差(ズレ)が出ることがある
- お金の計算では、その誤差に注意が必要
整数はできた、では小数は?
前回までで整数は0と1で表せました。問題はここからです。
- 整数(1, 2, 3…)はぴったり表せる
- 小数(0.1, 3.14…)は実はやっかい
- 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)でぴったり表せる
固定小数点とは
まずは素朴な方法から見ていきます。
固定小数点と浮動小数点
浮動小数点の3つの部品
浮動小数点は、数を3つの部品に分けて記録します。
たとえ 科学的記数法
浮動小数点は、理科で習う「大きな数の書き方」とそっくりです。
- 300000000 を 3×10の8乗 と書く
- 「3」が中身、「8乗」が小数点の位置
- この発想を2進数でやるのが浮動小数点
なぜ誤差が出るのか
誤差の正体は「決められた桁数」に収めきれないことです。
- 記録できる桁数には限りがある
- 割り切れない数はどこかで打ち切る
- その打ち切りが小さなズレになる
0.1 が正確に表せない話
10進数では簡単な0.1も、2進数では割り切れません。
- 0.1 は2進数だと無限に続く数
- 1÷3=0.333… と同じく終わらない
- 0.1+0.2 が 0.3 にならないことがある
丸め誤差と桁落ち
誤差にはいくつか種類があります。代表的な2つを知っておきましょう。
実務での注意 お金の計算
誤差がいちばん問題になるのは、1円もズレてはいけないお金の計算です。
- 合計が1円ずれると帳簿が合わない
- 消費税や割引で端数のズレが出やすい
- 金額は小数のまま扱わない工夫が必要
誤差を避ける工夫
誤差はゼロにできなくても、減らしたり避けたりできます。
"
コンピュータは小数を「いちばん近い値」で持っているだけ。 だから0.1のような数でも小さな誤差が出ます。 お金など正確さが命の場面では、整数で扱うなどの工夫が大切です。