どうもこんにちは!
サバ缶(@tech_begin)です。
基本・応用情報で頻出する問題、『丸め誤差』と『打ち切り誤差』について解説していきます。
よく出る問題であるということは、それだけ重要な知識だということです!
焦らず、少しずつ理解していきましょう。
そもそもなぜ誤差が起きるのか
スマホやパソコンといったコンピュータは、全て2進数で処理をしています。
つまり、全てのデータは「数値」で処理・表現されているわけです。
その数値は、表現できる範囲に限度があります。
なぜなら、処理を担う機器が物理的に有限状態であるためです。
無限の数を処理することが可能であれば、超越的存在…
つまり現実に存在し得ないコンピュータとなってしまいます😢
有限な状態を体験してみよう
すぐにわかる例で解説しますね。
9を3で割ってください。
9 ÷ 3 = ?
答えは『3』ですよね。では次に、
4を3で割ってください。
4 ÷ 3 = ?
答えは『1.3333…』と割り切れない値になりました。これを『無限小数』と呼んだりします。
Googleの電卓でも試してみましょう。
Googleは「1.33333333333」までしか表現していませんね。
本来は「1.33333333333333333333333333333333333」かもしれないのに、雑な計算をしていますね(失礼)。
丸め誤差
上の状態が『丸め誤差』です。
有効桁数以降の値を切り捨てることによって生じる誤差のことを「丸め誤差」と言います。
上のGoogle電卓の有効桁数は
『小数点以下11桁』ということになります。
ざっくり言うと「箱に収まらない分は諦めます」という感じです。
また、四捨五入で『小数点以下切り捨て』した値によって、本来の数との間に生じた誤差のことという認識でもOKです。
余談ですが、ビジネスでも「丸め」は起きています。
決算資料を見てみましょう。
トヨタ自動車株式会社の2022年3月期決算です。
(内容はわからなくても大丈夫です)
赤色枠に『31,379,507』とありますね。そして青色枠に『百万円未満四捨五入』とありますね。
つまり、実際には『31,379,507,000,000円(くらいだよ)』ということを表しています。
『31,379,507,499,999円』かもしれないし『31,379,506,500,000円』かもしれません。
トヨタは100万単位で丸めているということになります。
打ち切り誤差
割り切れない計算を実行すると、無限に処理が続いてしまいます。
4 ÷ 3 = 1.33333333333333333333333333333333333…(永久に続く)
そんなことをしていると、コンピュータはもっと重要な処理にリソース(資源、メモリのこと)を割くことができません。
言い換えれば、顧客情報を取得するような大切な処理を実行しているのに、頭の片隅で「4÷3」の割り算を永遠と続けているイメージです。
さらに噛み砕いて言えば、以下のようなイメージです。
- 業務の会議中で意見を求められて答えている最中に、購入した株の上下を気にしている(気にしても解決することはできない)
- こっちの仕事に集中してよ!
- お店に客多くて忙しいのに、1枚の皿をずっと洗い続けている(細菌を完璧に0にはできないのに)
- さっさとこっちの仕事手伝ってよ!
…と思いますよね。
それが『打ち切り誤差』です。
無限に続いてしまう計算を、ある時点で処理を打ち切ることによって発生する誤差のことです。
【まとめ】丸め誤差と打ち切り誤差の違い
- 有効桁数以降を切り捨てる
- 丸め誤差
- 無限に続く値の計算を打ち切る
- 打ち切り誤差
計算をしているか、していないかという違いで覚えても良いと思います。
さて、次は『情報落ち』と『桁落ち』について解説していきます。