全プロセスの詳細解説
-
真の合計が98,351.63である1,000の金額の最も近い整数への丸め 7 ステップ
ある店舗で、1,000 個の金額をそれぞれ最も近い整数に丸めて合計します。真の合計額は 98,351.63 です。それぞれのルールを適用した場合の丸められた合計を計算し、店舗がどのルールを使うべきか判断してください。
-
列の計算に入る前に、ルールを明確にしておきましょう。2.5 で考えてみます。四捨五入はこれを 3 にします。偶数への丸めはこれを 2 にします。2 が偶数の隣接値だからです。
-
偶数への丸めが常に切り下げるわけではなく、交互に切り替わることを確認してください。3.5 はどちらのルールでも 4 になります。今度は上にある値が偶数だからです。
-
さて、列について考えます。1,000 個の金額のうち、ちょうど境界上に位置するのは 11 個だけです。つまり二つのルールは 989 個の値において一致しており、違いが出るとしても最大で 11(境界値一つにつき 1 ずつ)になります。
-
丸められた値を合計します。四捨五入では 98,360 となり、真の値より 8.37 大きくなります。偶数への丸めでは 98,354 となり、2.37 大きくなります。両者の間の 6 の差は、先ほどの 11 個の境界値から生じたものです。
-
その乖離の大部分は境界値によるものではありません。それは通常の丸めによるものであり、1,000 個の一般的な数値であれば、どちらに転ぶ可能性もほぼ同じです。ノイズではなくルールの本質を見るために、列を境界値だけに切り替えてみましょう。すべての値が境界値の場合、四捨五入は 500 大きくなり、偶数への丸めの誤差は 6 になります。
-
比較のために、元の列で切り捨てを試してください。結果は 97,866 となり、486 不足します。切り捨ては境界値からだけでなく、ほぼすべての値から少しずつ何かを奪い取っていくため、乖離が積み重なるのに境界値を必要としません。
-
したがって、どのルールを使うべきかは、何を守りたいかによって決まります。一枚のレシートであれば、どちらのルールでも構いませんし、その差が半分を超えることはありません。しかし帳簿全体で見れば、偏った方向を持たないルールだけが、合計を本来あるべき場所に留めておくことができます。
解答
四捨五入では 98,360、偶数への丸めでは 98,354、切り捨てでは 97,866 となり、真の値は 98,351.63 です。 この店舗は偶数への丸めを使うべきです。個々の金額においてより正確だからではありません(実際、悪くなることもあります)。その誤差に特定の方向性がなく、結果として積み重ならないからです。四捨五入は、境界値に遭遇するたびに例外なく上方向へ半分ずつ間違えていくのです。
-
-
1.005 を小数第 2 位へ、そして境界のようで境界でない値 7 ステップ
1.005 を小数第 2 位に丸めてください。それを入力したとき機械が実際に保持している値を求め、そのうえで 1.00 と答える表計算ソフトが間違っているのかどうかを判断しましょう。
-
小数として見れば境界値です。1.005 は 1.00 からも 1.01 からも等距離にあるので、四捨五入は上へ送り、パネルは 1.01 と表示します。
-
しかし機械が保持しているのは小数ではありません。倍精度数は 2 のべき乗の和であり、0.005 は 200 分の 1、その分母には 2 のどのべき乗でも供給できない 5² が含まれています。2 進展開は終わりません。
-
格納されるのは最も近い倍精度数であり、それは 1.005 より約 1.07 × 10⁻¹⁶ 下にあります。厳密に比べればこれはまったく境界値ではなく、四捨五入なら 1.00 へ下ろすことになります。
-
この差は、比較のために値をスケールした瞬間に見えるようになります。1.005 × 100 は 100.49999999999999 であり、その小数部は 0.5 に 1.42 × 10⁻¹⁴ だけ届きません。
-
ここでの丸めが吸い付くのはそのためです。0.5 から機械語で 8 ステップ以内にあるものはすべて 0.5 として扱われ、この大きさではその窓幅が 1.79 × 10⁻¹³、先ほどの差の 10 倍以上あります。パネルは、2 進数が投げかけた問いではなく、あなたが小数について投げかけた問いに答えているのです。
-
この許容幅はただではなく、その代償は列が示します。.005 で終わる 1,000 個の値がそれぞれ 100 分の 1 の半分ずつ押し上げられ、合計は真の値より 5.00 高くなります。偶数への丸めは同じ境界値を振り分け、誤差は 0.07 に収まります。
-
残る二つのプリセットは種類が違います。2.5 と 12.5 は 2 進で厳密に表せるので、紙の上だけでなく機械の中でも境界値であり、許容幅は一切関与しません。「ちょうど半分」とは、あなたが入力した小数の性質であって、機械の中まで生き延びるのは本当に半分である半分だけなのです。
解答
1.01 です。そして 1.00 と答える表計算ソフトは、自分が保持している数については正しく、あなたが入力した数については間違っています。 格納された値は 1.005 より 1.07 × 10⁻¹⁶ 下にあるため、厳密な比較が境界値を見ることは決してありません。読み手が期待する場所へ答えを戻しているのは、あの吸い付きです。どんな丸め規則も、その下にある問題そのものは直せません。お金は整数のセント、あるいは十進型に置くべきです。そこでは 1.005 は 1.005 であり、この問い自体が起こりません。
-
学習の道すじ
数を書き下すということ
参考文献 (2)
- Why half-to-even is the default rather than the rule taught in school, and what else the standard fixes: IEEE, "IEEE Standard for Floating-Point Arithmetic." IEEE Std 754-2019, 2019.
- The long-form explanation of why 1.005 is not stored as 1.005, and what follows from it: D. Goldberg, "What Every Computer Scientist Should Know About Floating-Point Arithmetic." ACM Computing Surveys 23(1), 5–48, 1991.