[#30743] 大きな数の大まかな割り算 — Yukihiro Matsumoto <matz@...>

まつもと ゆきひろです

17 messages 2007/05/01

[#30827] Supporting Fiber — SASADA Koichi <ko1@...>

 ささだです。

22 messages 2007/05/27

[ruby-dev:30749] Re: 大きな数の大まかな割り算

From: keiju@... (石塚圭樹)
Date: 2007-05-02 04:15:20 UTC
List: ruby-dev #30749
けいじゅ@いしつかです.

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 #<Rational:0xb78070c0>
>	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 <<---

In This Thread