From: Shigeo Kobayashi Date: 2002-04-09T21:16:44+09:00 Subject: [ruby-dev:16809] Re: if Re: BigFloat 小林です。 ----- Original Message ----- From: "Shin-ichiro HARA" Subject: [ruby-dev:16805] Re: if Re: BigFloat > 原です。 どうもです。 > この問題は何度かあがっているのですが、私は > > > > Rational op BigFloat -> BigFloat > > の方が良くて、 > > >Rational op BigFloat -> Rational > >BigFloat op Rational -> Rational > > こっちは良くないという感じがします。というのは、Float でも 私も Float なら Rational op Float -> Float という案には賛成 です。 > BigFloat(BigDecimal) でも小数というのは、誤差というある種の > taint みたいなものを持っていると考えられます。だから、Rational > みたいな clean なものと小数のような tainted なものを合わせて > clean になってしまうのは、自然の法則(エントロピー増大の法則 > ?)に反するようなイメージがあるのです。 えっと、 tainted な Rational も存在できるわけですよね。 データ(敢えてこういいます)が持っている taint 性とデータを 扱う演算の clean さは別けて考えたいのですが、変でしょうか? つまり  Float op Something ==> taint 性は増大する  Rational op Rational ==> taint 性は変化しない の違いかと... > > Float, BigDecimal には、「誤差がある」という情報を暗に持っ > ている。Rationalには、「誤差がない」という情報がある。もし > 「Ratinal op BigFloat -> Rational」とするなら、両方の情報 > を捨ててしまう事になる(一方は残せるのに)、という気がする > んです。 私は『Rationalには、「誤差がない」』というより、「誤差が生じ ない」と考えています。すべからく数値には(物理的、統計的 な意味での)誤差は入っているわけで、例えば「誤差」のある 測定データを Rational で計測・計算しても、誤差が消えるわ けではありません。Rational ならそれ以上汚れることはない とういうことで、それが「(一方は残せるのに)」という意味です よね。 あまりかっこよくはありませんが  1234(BigDecimal) => 1234/1 (Rational) 0.1234(BigDecimal) => 1234/10000(Rational) というようにBigDecimalからRationalには常に(誤差無しに)変換 可能と思うのですが(これが[ruby-dev:16789]のプログラムです)? つまり  BigDecimal ==> Rational においては taint 性は変化しない し、以後 Rational な世界に入るので問題なしと考えたのです。 ここに何か落とし穴があるのでしょうか? ------------------ 小林 茂雄 shigeo@tinyforest.jp