From: Tadayoshi Funaba Date: 2008-02-13T20:14:12+09:00 Subject: [ruby-dev:33757] Re: bigdecimal > > んー、たぶん、そこは間違っていたと思います。拡張ではなく、まったくの独 > > 自仕様です。 > まぁ、仕様が無い時点での新規導入なので、それを独自 > と呼ぶならばそういうことにしておきましょう。 現在でも ruby には仕様がないといえばないですが、そのあたりは、その時点 でも十分定着していた考えだったと思います。今更ですが。 > 完全互換をもつサブセットを用意し、その上に拡張セットを > 作成するというのはもっともな考えとは思います。 > ただ、程度問題で、そうすると同じようなメソッドが一気に増 > えてしまい、それはそれで混乱を引き起こすでしょう。 でも、BigDecimal#fix など、さらに似たようなメソッドを追加しているとこ ろからもミニマル志向というわけでもないですよね。 > 残り物から名前を選ぶのも何だか... > Rationalは別にして(それも程度問題ですが)、そもそも、 > Floatでは精度(桁数)指定をできないし、指定した途端に > 互換はなくなるわけで、サブセットだけを使用するコードに > 意味を見出せません(基本の「+,-,*,特に/」すら)。 非常に単純な例ですが、次のメソッドは、ほぼすべての数値クラスに対して機 能すると思います。 def square(x) (x * x) end これは意味がないことなんでしょうか。 > 可変桁数演算中の trancate 等(と同様なメソッド)を使用 > する場合で、戻りが Integer を期待するケースってどうなん > でしょうね? 最終結果だけならともかく、その結果を使用 > して計算続行するためには元に戻さなくちゃいけないし。 > コンピュータアーキテクチャーに振り回されているだけの > ような気がします。 よくわかりませんが、精度を第一に気にして div の仕様を変えちゃうのもか なり振り回されているような気がしないでもないですが。 > # シンドクなって来た... 2年近く前に殆ど同じような内容の問い掛けをしていたのですが、その時はな にも得られませんでした。これだけ聞くのにどれだけ苦労していることか。 しかし、だいたい解りました。BigDecimal は独特なので、他の数値クラスと は一緒に考えちゃいけないということですね。小林さんもそういう風に評価さ れるのは不本意である、ということなのでしょう。 BigDecimal が既存の数値クラスを尊重しないのと同じに、他の数値クラスも BigDecimal について気にしなくていいようです。たとえば、Numeric#sign を 用意する場合、BigDecimal とは違うものになる可能性が高いですが、そういっ た場合でもまったく気兼ねする必要はなさそうです。