Float::EPSILON

Rubyレシピブック(P290)で 比較する数値の差を Float::EPSILON と比較する方法がありますが、記事の例(比較する数値が1.0)はTrueとなってうまくいきますが、それ以外の数値ではFalseでうまくいきません。

比較したい数で割るのを忘れているとか:

$ ruby -e 'x = 10.333333333333333 ; p Float::EPSILON > ((x-31.0/3)/x).abs'
true

おお。そんなやり方が。勉強になります。

EPSILON

1.0 + Float::EPSILON != 1.0 となる最小の値