From: Shigeo Kobayashi Date: 2002-04-11T23:27:57+09:00 Subject: [ruby-dev:16853] Re: if Re: BigFloat 小林です。 ----- Original Message ----- From: "Shin-ichiro HARA" Subject: [ruby-dev:16848] Re: if Re: BigFloat > 実用上はこれで十分ですね。ただし BigDecimal はこういうものだ > という事をもう少しマニュアルなどで宣伝しておいた方がいいでしょ > う。 はい。 .... > >うーん、2進内部表現のビット幅や指数部がわかれば > >Ratinal.new(a1*2**0+a2*2**1+a3*2**2+..., 2**n) > >と出来なくはないと思いますが... > > あれ、C 言語では内部表現ってアクセスできないんでしょうか? できないことはないと思いますが、一般的ではないと思います。 でも、一般的にできるんなら Float op Rational -> Ratinal に 賛成しちゃいますけど。 (^^);; > > >取り合えず BigDecimal#to_r を提供([ruby-dev:16789]) > >して、後はユーザ任せじゃダメでしょうか? > > これはどういう意味ですか。 > > BigDecimal op Rational -> BigDecimal > > にして、かつ BigDecimal#to_r を用意するということ? > それは賛成です。 あはっ、そうじゃなくて BigDecimal#to_r と Rational#to_d(かな?) だけを用意して(前の石塚さんの 案では bigfloat-rational.rb?) BigDecimal op Rational の結果は「ユーザの好みに任せる」ということです。 結果がどちらであれ BigDecimal op Rational はコストが かかりますので「自動的」にはやらないということです (knuさん、すいません)。 因みにRational#to_dはこんな感じですか、 class Rational def to_d(n=0) if n<=0 BigDecimal.new(self.numerator.to_s)/self.denominator else (BigDecimal.new(self.numerator.to_s).div(self.denominator,n))[0] end end end ------------------ 小林 茂雄 shigeo@tinyforest.jp