From: madoka yamamoto Date: 2007-11-09T09:48:40+09:00 Subject: [ruby-dev:32188] Re: Date#+に大きな数字を与えるとおかしな日付に 山本です。 > パッチの意味がよくわからないのですが、これだとまともな結果が得られませ > ん (なぜ floor を排除して to_i にしたのかもわかりません。floor をつか > うべきだと信じています)。 アルゴリズムの意味がわからないで書いた、表層的なパッチなので 間違ってる可能性はあると思ってました。 具体的にはどういった数字を与えると、どういった問題が出ますでしょうか? floorを使わない理由はrationalに対してfloorを使うと結局floatを経由してしまうみたいだからです。 rationalの丸めにto_iを使うのが正しい手法かはわからないのですが。 以下のスクリプトではto_iのほうが良い結果が出ます。 require 'rational' n = 2**64 r = Rational(n,3) p "n",n p "floor", r.floor*3 p "to_i", r.to_i*3 "n" 18446744073709551616 "floor" 18446744073709550592 "to_i" 18446744073709551615