Bug #1645

大きな数の比較で正しくない結果になることがある

Added by tadayoshi funaba almost 6 years ago. Updated almost 4 years ago.

[ruby-dev:38672]
Status:Closed
Priority:Normal
Assignee:-
ruby -v:ruby 1.9.2dev (2009-06-17 trunk 23726) [i686-linux] Backport:

Description

=begin
大きな数の比較で正しくない結果になることがある

main@192-20090617> inf = 1.0/0.0
#=> Infinity
main@192-20090617> inf <=> (Float::MAX.to_i*2)
#=> 0
=end

History

#1 Updated by Yukihiro Matsumoto almost 6 years ago

  • Status changed from Open to Closed
  • % Done changed from 0 to 100

=begin
Applied in changeset r23730.
=end

#2 Updated by tadayoshi funaba almost 6 years ago

=begin
内容は見ていませんが、上記の例はたしかに期待どおりの結果になりました。
しかし、未知のクラスにはやはり対処できないものなのでしょうね。

main@192-20090618> inf <=> BigDecimal((Float::MAX.to_i*2).to_s)
#=> 0

=end

#3 Updated by Yukihiro Matsumoto almost 6 years ago

=begin
まつもと ゆきひろです

In message "Re: [Bug #1645] 大きな数の比較で正しくない結果になることがある"
on Thu, 18 Jun 2009 23:00:02 +0900, tadayoshi funaba redmine@ruby-lang.org writes:

|しかし、未知のクラスにはやはり対処できないものなのでしょうね。
|
|main@192-20090618> inf <=> BigDecimal((Float::MAX.to_i*2).to_s)
|#=> 0

今回の修正ではそうですね。しかし、

  • Floatがinfで
  • infinite?メソッドが定義されていて
  • それが偽を返す時

を特別扱いすれば、対処可能な気がしてきました。

=end

Also available in: Atom PDF