From: wada toshiki Date: 2007-01-13T09:06:03+09:00 Subject: [ruby-list:43112] Re: 浮動小数点を比較するには NISHIMATSU Takeshiさん wrote: > 比較したい数で割るのを忘れているとか: > $ ruby -e 'x = 10.333333333333333 ; p Float::EPSILON > ((x-31.0/3)/x).abs' > true > $ ruby -e 'x = 0.333333333333333 ; p Float::EPSILON > ((x- 1.0/3)/x).abs' > false > $ ruby -e 'x = 0.3333333333333333 ; p Float::EPSILON > ((x- 1.0/3)/x).abs' > true > (Rubyレシピブックを持っていないのでどういうことをしているのかわかりませんが) Rubyレシピブックでは以下のようになっています。 class Float def near_to(b) (self - b).abs * abs < Float::EPSILON end end x = 0.0; 10.times{ x += 0.1 } p 1.0.near_to(x) #=> true (self - b).abs * abs は、(self - b).abs / abs の誤りだと思うのですが、 x = 0.0; 20.times{ x += 0.1 } p 2.0.near_to(x) #=> false となります。 p x.near_to(2.0) #=> true だと、動きが変わりますが。 ちなみに、ruby 1.8.4 (2005-12-24) [i386-mswin32] です。 -- ********************************************* 和田稔己