From: Tadashi Saito Date: 2003-07-21T15:19:34+09:00 Subject: [ruby-dev:20749] [BigDecimal] new: necessity of 2nd argument 斎藤です。 BigDecimal.new("3.14", 10) という時の第二引数について、 存在意義が良く分かりません。 付属のHTMLには「最大有効桁数」との記述があり、 ・この指定はほぼ d.prec[1] の指定といえる ・常に d.prec[0] <= d.prec[1] になる というところまでは分かりました。 しかしこの「最大有効桁数」が、実際にどのような意味を持っている のか、よく分かりませんでした。 たとえば d = BigDecimal.new('1', 100) p d.prec[1] # => 104 d += d p d.prec[1] # => 12 などとなるので、どうやら演算にとって必要以上の「最大有効桁数」 は無視され、演算後のオブジェクトの最大有効桁数は適切な大きさ まで減るようです。 かといって、実際に使われる桁数よりも少ない数を第二引数として 与える (例えばBigDecimal("3.14", 1)とか) と無視されるわけ ですから、結局第二引数を指定する意義は、d.prec[0] よりも d.prec[1] がかなり大きいという状況を意図的に作るためのみに ある、ということになりますよね。 自分の推測では、このnewの第二引数というのは、BigDecimal オブジェクトを「数値の入れ物」と見たときの、「入れ物の大きさ」 を指定しているのではないでしょうか? mutable時代に、「大きめな入れ物を用意しておいてパフォーマンスを 稼ぐ」という時に使われたのでは、と推測しました。 もしそうだとしたら、immutableな数値クラスという方針と相容れない ものですので、第二引数の指定は削除すべきと思います。 どうでしょうか。 # でも、勘違いをしている可能性が大いにありそうです -- 斎藤ただし