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

まつもと ゆきひろです

17 messages 2007/05/01

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

 ささだです。

22 messages 2007/05/27

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

From: Nobuyoshi Nakada <nobu@...>
Date: 2007-05-02 03:35:33 UTC
List: ruby-dev #30748
なかだです。

At Wed, 2 May 2007 11:11:47 +0900,
石塚圭樹 wrote in [ruby-dev:30746]:
> class Rational
>   def to_f
>     m = Float.prec_size
>     e = m - abs.log2floor
>     Math.ldexp((self * 2**e).floor.to_f,-e)
>   end
> end

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

とエラーになりました。

それと、Rational#floorはないみたいなので、(self * 2**e).floor
でやはりオーバーフローしそうな気がするのですが。

-- 
--- 僕の前にBugはない。
--- 僕の後ろにBugはできる。
    中田 伸悦

In This Thread