【まるめごさ】
丸め誤差 とは?
最終更新:
💡 限られた桁で数を表すと、元の値とズレが出る
数値を限られた桁数や精度で表すために丸めたとき、元の値との間に生じる差。2進浮動小数点で0.1を正確に表せない例や、計算結果を丸める際にも現れる。
📌 このページのポイント
- 有限の精度で数値を近似したときに生じる差
- 2進浮動小数点では0.1を正確に表せない
- 保存時だけでなく計算結果の丸めでも誤差が生じ得る
- 用途に合わせて精度・丸め方・比較の許容差を決める
0.1 + 0.2 が0.3にならないって本当なの?
JavaScriptのNumberなど、2進浮動小数点を使う計算では0.30000000000000004になる例があるよ。数学としての足し算が変わるのではなく、保存する値や計算結果を有限の精度に近似するためなんだ。
どうして0.1でズレが出るの?
10進数の0.1は、2進数では0.0001100110011…と無限に続く。有限のビット数では全部を保存できないので、表せる近い値へ丸めるんだ。0.5のように2進数でも有限桁で表せる小数もあるよ。
四捨五入の誤差だけを指すの?
丸め方には切り捨てや、最も近い値を選ぶ方法などがあるよ。また2進数だけの問題でもない。10進の型でも1÷3などは有限桁に収まらず、決めた精度で丸める必要がある。計算の途中で誤差が重なることもあるんだ。
対策すれば誤差は全部なくなる?
扱う数と用途によるよ。一定の単位で表せる金額なら最小単位の整数を使う方法があるし、10進の値を扱うDecimalなどの型もある。ただし割り算や精度の制限では丸めが必要。元の値の渡し方、精度、丸め規則もそろえるんだ。
値を比較するときはどうするの?
近似値の比較では、用途に合う許容差を使うよ。絶対的な差だけでなく、値の大きさに応じた相対的な差を考える方法もある。Pythonのmath.isclose()は両方を指定できる。整数や正確に一致すべき値まで、一律に近似比較へ変える必要はないんだ。
まとめ:ざっくりこれだけ覚えればOK!
「丸め誤差」って出てきたら「コンピュータの小数計算で生じるズレ」と思えればだいたいOK!
📖 おまけ:英語の意味
「Rounding Error」 = 丸めによる誤差
💬 Roundは、決めた精度に数値を丸めること。四捨五入だけでなく、切り捨てなどの丸め方もあるよ。