LoginSignup
0
1

More than 1 year has passed since last update.

[Ruby] 丸め誤差というバグについて簡単に説明

Last updated at Posted at 2022-01-11

丸め誤差とは

コンピューターの内部で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クラスは有理数を表すことができる
小数点を使わない計算をすることで、バグを回避できます。

おわりに

最後まで読んでいただいた方ありがとうございます。
何かあればご教授いただけますと嬉しいです。

0
1
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1