[ruby-list:47273] Re: case when 整数と実数の比較 (ruby 1.9)

From: rubikitch@...
Date: 2010-07-30 09:25:01 UTC
List: ruby-list #47273
From: 小田 利通 <oda@alato.ne.jp>
Subject: [ruby-list:47272] case when 整数と実数の比較 (ruby 1.9)
Date: Fri, 30 Jul 2010 14:41:58 +0900

るびきちです。

>    case 1
>     when 1.0 ; puts "SAME"
>     else       puts "DIFFERNT"
>    end '
> 
> => 1.9.1
>    DIFFERNT
> 
> => 1.8.7
>    SAME
> 
> when 節を変数にするとちゃんと動きます。

==では正しいだけに、不思議な現象ですね。

1 == 1.0                        # => true
1.0 == 1                        # => true

ですが、そもそも浮動小数点数で直接比較するものではありません。
丸め誤差の関係で思わぬ落とし穴にはまります。

0.1+0.1+0.1 == 0.3 # => false

--
rubikitch
Blog: http://d.hatena.ne.jp/rubikitch/
Site: http://www.rubyist.net/~rubikitch/
Twit: http://twitter.com/rubikitch/
『Emacsテクニックバイブル』 http://d.hatena.ne.jp/rubikitch/20100713/emacsbook
『Ruby逆引きハンドブック』  http://d.hatena.ne.jp/rubikitch/20090525/rubybook

In This Thread