From: Tadashi Saito Date: 2003-07-10T19:29:15+09:00 Subject: [ruby-dev:20611] Re: [BigDecimal] renaming proposal 斎藤です。 ----- Original Message ----- From: "Shigeo Kobayashi" Sent: Thursday, July 10, 2003 4:55 PM Subject: [ruby-dev:20598] Re: [BigDecimal] renaming proposal > もちろんです。しかし、たかだか30行に満たない、かつ、Ratinal と > BigDecimal を同時に扱う人にとっては自明なものにそれだけの労 > 力を割く気はありません。単なるサンプルです(だったら sample > ディレクトリに移したら? という提案ならば考慮します。)。 > # 将来、Rational がビルトインされれば、bigdecimal.c 中に同等な > # ものを(Cコードで)組み込むべきでしょうけど。 分かりました。自分は「単なるサンプル」とは思ってなかったので、 そこが認識の違いだったわけですね。 bigdecimal-math の扱いも同じような感じになりますか? > それと、 [ruby-dev:20581]のパッチありがとうございました。 > ただ、ソースは既に自分で修正していましたので現状ので、そのうち > コミットします。 BigDecimal()の事ですよね。了解しました。ありがとうございます。 > もうひとつ、bigdecimal-math.rb ですがざっと見させていただきました。 > まず maxnr の値が固定というのは?です。 これは、bigdecimal.cの最初の部分だけ見て安直にコピーして しまいました。すみません。 > sqrt なら 2次の収束がある程度得られるので maxnr = n + ? > のようなことが考えられます。 実はここらへんさっぱりなのですが、コードを見るに、 maxnr = [y.prec[0], 100].max ということでしょうか? あと自分が試した限りは、maxnr回ループする事はなかったのですが、 これがどういうことを意味しているか、よく分かりませんでした。 > 割り算 / や掛け算 * は、 > BigDecimal::limit である程度桁をしぼるか、 div や mult メソッド > を利用したほうが効率的と思います。 なるほど。少なくとも、関数に対して要求された精度と 同じ桁数まで絞って平気なのでしょうか。 > to_f は Float::DIG 等を考慮して無駄なことはをしないほうがベター > です(って split の説明に入れてないか...)。 Float::DIG以上の余分な桁数を計算する必要はない、ということですよね。 というか、自分が別のスレッドで書こうとしてたのですが、遅れてしまい すみません。具体的には、BigDecimal#to_fはBigDecimalではなくFloatを 返すべきでは、という話をしようと思ってました。 なのでbigdecimal-math.rbの中のto_fは暫定版です。 > あと NaN は BigDecimal("NaN") で得られます。 自分が最初に小林さんに提出したパッチがこれ関係だったのに… 忘れてました。直しますね。 # しかしFloatでは、文字列 "NaN" 等を特別に扱う仕組みはない # みたい…でも悪いことはなさそうだし、BigDecimalのほうは現状で # いいでしょうかね。 > もっとも、一番の問題は >  級数展開でいいの? 不勉強ながら、自分は級数展開以外の方法を知りません。 >  誤差判定をどうするの? ですね。こちらも自分は思いつきません。 > 私は、やはり「Float から文字列を参照(Float#text?)」がいいですね。 > これは、BigDecimal だけでなく、Float に誤差がある以上、元の文字 > 列を見たいという欲求はあると思うからです。 FloatにFloat以上(以外)の機能を与えているような気がして、 自分はちょっと違和感を覚えます。強く反対をするつもりはないですが、 やはり将来リテラルとして採用する方が筋なのでは、と素人なりに 考えを巡らせてます。 --- 斎藤ただし