丸め誤差とは「表現できる桁数を超えた際」に起こる誤差です。
最小桁より小さい部分を四捨五入や切り上げ、切り捨てなどを行い生じます。
どんな時に起こるか?
10進数の少数では2新数で表せないものがあります。
例えば10進数の0.1を2進数で表現してみましょう。
0 . 0001 1001 1001 1001 1001 1001・・・
無限小数になります。
この場合ものすごく小さい誤差のように見えますが、お金の利息計算などの場合繰り返し計算するととても大きい誤差に発展したりします。
何によって起こるか?
CPU、プログラミング言語、ライブラリなどの「仕様」によって発動することが多いです。プログラマなどがこの仕様を決められる場合もあります。
打ち切り誤差との違い
非常によく似た誤差に打ち切り誤差というものがあります。この誤差も円周率など、永遠に続く計算を打ち切ることで生まれる誤差です。
何が違うのか?
打ち切り誤差はプログラマや設定者が設定することが多い誤差です。
具体的な場面を想像してみます。
プログラミングで、「この計算はこのくらいの精度が出ていればよく、早く計算ができた方が良い」という要件があったとします。
その際、プログラマが小数点以下3桁で計算を打ち切るというプログラムを実装したりします。これは打ち切り誤差になります。
丸め誤差 | 打ち切り誤差 | |
起因 | 数値の表現方法 | 計算の方法 |
なぜ起こるのか? | CPU、プログラミング言語、フレームワークなどの仕様 | プログラマが設定 |
計算中の最後の処理 | 丸め処理が走る(切り捨て、四捨五入、切り上げ) | 計算を止める(丸め処理が走る場合も0ではないらしい?) |
コメントを残す