From: Kenta Murata Date: 2011-08-01T08:30:38+09:00 Subject: [ruby-dev:44286] Re: 1.9.3 (以降) の BigDecimal について むらたです。 On Monday, August 1, 2011 at 02:10 , Tadayoshi Funaba wrote: > > 私は精度を必須にする事に意味が無いとは考えません。 > > 逆に有理数の10進展開を打ち切る桁数が勝手に決まる事の方に意味を感じません。 > > > > ふなばさんは BigDecimal(Rational(Math::PI)) は何桁で展開されるべきだとお考えですか? > > できれば、その桁数をデフォルト値にして良いと考える根拠も含めて教えて頂きたいです。 > > それは判りません。精度を指定する事に意味がないと言っているのでなく、全 > 体として精度の指定が徹底していないのであれば、現時点に必須とする意味が > よく判らないと思います。 「精度の指定」は徹底できていると思っているのですが、まだ抜けているでしょうか。 Rational#to_d だけは、ActiveRecord のために互換性を維持するようデフォルト引き数を 維持するようにしましたが、その他の場合について変換後の桁数の指針が無い場合は 明示的に指定するように設計したつもりです。抜けがあったらご指摘ください。 現状に対する私の理解は「精度の仕様さえ整えられれば全体が上手くまとまる」です。 ですから、精度の仕様を先に修正してから変換系に手を付けろという指摘があるとしたら、 それは確かにもっともだと私も思います。 先に変換系に手を付けることになったのは、それらに対して要求があったからです。 [ruby-core:34335] の辺りのスレッドです。 > 実際には、Rational#to_d なども変更になっているわけですから、単に新しい > 機能を追加したというわけではないですよね。 BigDecimal 関数による変換機能は、RubyKaigi で足りない機能として紹介した事があるくらいなので、 もともと導入したいと考えていたものです。実際に追加されたきっかけは上記の ML のスレッドです。 これらを追加したときには各 to_d メソッドとの対称性についてまで気を配れていませんでした。 ですから、機能が増えた当時は単に新しい機能を追加したような気分でいたと思います。 今はどうかというと、ふなばさんの指摘のおかげで気付けたので to_d まで含めて変換系として考えています。 ただし、だからといって、Rational#to_d で引き数を省略できる事をもって統一性が無いと 指摘するのは勘弁してください。 これは上述のとおり、ActiveRecord のために互換性を維持するように残しただけです。 Rational#to_d の引き数を省略すると警告が出ることからも分かってもらえると思いますが、 この機能は非推奨です。存在してはならない振る舞いだと思って頂きたいです。 -- Kenta Murata Sent with Sparrow (http://www.sparrowmailapp.com)