From: Shin-ichiro HARA Date: 2002-04-10T15:22:29+09:00 Subject: [ruby-dev:16826] Re: if Re: BigFloat 原(信)です。 >小林です。 こんにちは。実は、今初めて BigFloat のマニュアルを読みました。 思っていたのと違ってました。(^^; なぜ小林さんがそういう意見な のか今頃わかりました。ごめんなさい。 それは別便で書くとして、 > > Float, BigDecimal には、「誤差がある」という情報を暗に持っ > > ている。Rationalには、「誤差がない」という情報がある。もし > > 「Ratinal op BigFloat -> Rational」とするなら、両方の情報 > > を捨ててしまう事になる(一方は残せるのに)、という気がする > > んです。 >私は『Rationalには、「誤差がない」』というより、「誤差が生じ >ない」と考えています。すべからく数値には(物理的、統計的 >な意味での)誤差は入っているわけで、例えば「誤差」のある >測定データを Rational で計測・計算しても、誤差が消えるわ >けではありません。 いや Rational には誤差が入らない、というのが習慣だと思います。 Rational や Integer は計測値の表現としては使わず、理論的な値 にのみ用いられるのでは。 ある長さを測って、ちょうど 0.5cm だったとしても、その正確さを 0.500cm と表現する事はあっても、絶対 1/2 cmとは表現しません。 (少なくともふた昔前の中学校では、そう教えられました。^^;) 逆に理論的な値を、例えば数学で Pi/8 を 0.125*Pi とは書かない のが習慣だと思います。 そういうわけで、ある数が Ratinal や Integer であるというのは、 理論的な値であると表明している事になるわけです。 > Rational ならそれ以上汚れることはない > とういうことで、それが「(一方は残せるのに)」という意味です > よね。 「汚れている」という貴重な情報が残せるのに、という意味です。 私は BigDecimal は「汚れている」と思っているわけで、小林さんは Rational と同程度クリーンであると思っていて、話がかみ合ってない みたいなんですが、「Ratinal op BigFloat -> Rational」というのは、 データがどの程度の誤差があるかという情報を消してしまうので良くな いと思うのです。例えば、摂氏 11.5度は華氏何度か?という問題に対 して (9/5)*11.5 + 32 = 577/10 と計算してしまうと、 (9/5)*11.500000000000000 + 32 = 577/10 と同じですから、もともとの有効桁の情報が全く消えてしまう事にな るわけです。 しかし BigDecimal はデータの精度に興味を持ってないんですね! なーるほど。(続く)