1
2

More than 3 years have passed since last update.

Rubyの丸め誤差備忘録

Last updated at Posted at 2019-11-27

小数点での計算の際、思わぬバグが生じたりする。

例えば0.1かける3が0.3にならない。

丸め誤差発生
0.1 * 3.0

 => 0.30000000000000004

これはPCが10進数ではなく2進数で計算していることが原因なのですが、
上記コードから、以下のような場合が発生します。

思わぬバグ
0.1 * 3.0 == 0.3 #-> false
0.1 * 3.0 <= 0.3 #-> false

そのため、Rubyで小数点の計算を行うときは、Rationalクラスを使う!
数字の後ろに『r』をつけることで利用できる!

Rationalクラス利用
0.1r * 3.0r #->3/10

# 上記を利用すると・・・
0.1r * 3.0r == 0.3 #-> true
0.1r * 3.0r <= 0.3 #-> true

変数に小数点が入っている場合は、rationalizeメソッドを呼び出すことでRationalクラスの数値に変換することができる!

rationalizeメソッド
a = 0.1
b = 3.0
a.rationalize * b.rationalize #-> 3/10

『分数になってるやないか!』というツッコミが聞こえてくる・・・
その場合はto_fメソッドを使って、分数を少数にしてくださいませ!

to_fメソッド
(0.1r * 3.0r).to_f #-> 0.3

以上、備忘録でした!

参考文献

プロを目指す人のためのRuby入門

1
2
0

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
1
2