丸め誤差とは
コンピューターの内部で10進数ではなく、2進数で計算すると発生するのが丸め誤差です。
「有限桁で数を表そうとするから」と捉えたほうがいい↑
###Rubyに備わっているirbを使って確認してみましょう
irb(main):001:0> 0.1*3.0
=> 0.30000000000000004
上記のように0.3になりません。
このような誤差のバグで正しく処理できないことがあります
↑不可避
以下が例です。
###数値の大小を比較したりする際にバグになる
irb(main):002:0> 0.1*3.0 == 0.3
=> false
irb(main):003:0> 0.1*3.0 <= 0.3
=> false
trueではなくfalseが返っています。
こうなると正しく計算ができませんよね
対処法
Rationalクラスを使う
先ほどの計算にRationalクラスを使ってみましょう
数字に後に'r'を付けます。
irb(main):004:0> 0.1r*3.0r == 0.3
=> true
irb(main):005:0> 0.1r*3.0r <= 0.3
=> true
無事trueが返ってきました!
#おさらい
Rationalクラスは有理数を表すことができる
小数点を使わない計算をすることで、バグを回避できます。
おわりに
最後まで読んでいただいた方ありがとうございます。
何かあればご教授いただけますと嬉しいです。