From: keiju@... (=?ISO-2022-JP?B?GyRCQFBETTc9PHkbKEI=?=) Date: 2007-05-02T13:15:20+09:00 Subject: [ruby-dev:30749] Re: 大きな数の大まかな割り算 けいじゅ@いしつかです. In [ruby-dev:30748] the message: "[ruby-dev:30748] Re: 大きな数の大ま かな割り算", on May/02 12:35(JST) Nobuyoshi Nakada writes: >なかだです。 > >prec_sizeはFloat::MANT_DIGでいいのではないかと思いますが、 なるほど. 何かあるんじゃないかと思っていました. >irb(main):017:0> (((522 / 100 / 365) + 1) ** 365).to_f >NoMethodError: undefined method `log2floor' for # > from (irb):4:in `to_f' > from (irb):17 > >とエラーになりました。 class Rational def log2floor raise RangeError, "not defined for self <= 0" if self <= 0 return floor.log2floor if self >= 1 m=(1/self).floor.log2floor + 1 (self*2**m).floor.log2floor - m end end でした. >それと、Rational#floorはないみたいなので、(self * 2**e).floor >でやはりオーバーフローしそうな気がするのですが。 class Rational def floor @numerator.div(@denominator) end end になっています. Bignum#div がちゃんと定義されていれば大丈夫そう. __ ---------------------------------------------------->> 石塚 圭樹 <<--- ---------------------------------->> e-mail: keiju@ishitsuka.com <<---