From: Yusuke Endoh Date: 2010-01-27T01:31:04+09:00 Subject: [ruby-dev:40167] [Bug #2661] Bignum <= BigDecimal("NaN") raises an Exception Bug #2661: Bignum <= BigDecimal("NaN") raises an Exception http://redmine.ruby-lang.org/issues/show/2661 起票者: Yusuke Endoh ステータス: Open, 優先度: Normal カテゴリ: core ruby -v: ruby 1.9.2dev (2010-01-27 trunk 26434) [i686-linux] 遠藤です。 Bignum と BigDecimal("NaN") を <= などで比較すると例外があがります。 $ ./ruby -rbigdecimal -ve 'p 2**100 <= BigDecimal("NaN")' ruby 1.9.2dev (2010-01-27 trunk 26434) [i686-linux] -e:1:in `<=': comparison of Bignum with BigDecimal failed (ArgumentError) from -e:1:in `
' ざっと確認した限りで、1.8.6-p388 、1.8.7-p249 、1.9.1-p378 、trunk のいずれ でも発生します。 Comparable#<= が動き、その中で coerce と <=> が呼ばれますが、NaN との <=> は nil が返るため、Comparable#<= が音を上げます。 Fixnum#<= の場合は、coerce を呼んだ後、coerce の結果に対して <= を呼ぶので 例外にはなりません。 Fixnum と同様に Bignum#<=, <, >= > を実装しないと対処できないような気が します。 例によって、rubyspec がこれで落ちています。 20) BigDecimal#<= properly handles NaN values ERROR ArgumentError: comparison of Bignum with BigDecimal failed /home/mame/work/ruby/spec/rubyspec/library/bigdecimal/lte_spec.rb:77:in `<=' /home/mame/work/ruby/spec/rubyspec/library/bigdecimal/lte_spec.rb:77:in `block (4 levels) in ' /home/mame/work/ruby/spec/rubyspec/library/bigdecimal/lte_spec.rb:74:in `each' /home/mame/work/ruby/spec/rubyspec/library/bigdecimal/lte_spec.rb:74:in `block (3 levels) in ' /home/mame/work/ruby/spec/rubyspec/library/bigdecimal/lte_spec.rb:4:in `' -- Yusuke Endoh ---------------------------------------- http://redmine.ruby-lang.org