From: keiju@... (=?ISO-2022-JP?B?GyRCQFBETTc9PHkbKEI=?= ) Date: 1999-03-25T20:16:02+09:00 Subject: [ruby-dev:6510] Re: Bigfloat けいじゅ@日本ラショナルソフトウェアです. In [ruby-dev :6447 ] the message: "[ruby-dev:6447] Bigfloat ", on Mar/23 07:36(JST) GOTO Kentaro writes: >ごとけんです >>>となります.これをヨシとするかどうかです. >>うーん. これは桁おちの問題ですね? >これ自体はそうですね. はい. >ただ不連続なものと,極値を持つもの,微分が定義できない点を >含むものが精度を変化させる可能性があると思っているのですが, そうですね. >Bigfloat にあるべきメソッドのうち,この範疇に入るのは次の4つ >だと思います. > > divmod, %, /, *, ** > >ただ,これらのうち, / と ** と * は,いずれも原点近傍でのみ >イヤなことが起こるので, >>> = 1/(0.999999999999999999999999-0.999999999999999999999999) >>> = 1/(0.000000000000000000000000) >> = 1/0.0e-20 >>ここで, 有効桁数が0桁になっていますよね. >>割算というか引き算により精度が落ちるのが問題かと... >という問題に回収されます.そうすると, はいはい. >># Floatには今でもそういう問題はあるわけですし... >という考え方もあるわけですが,Bigfloat が目指すものが, ええ. > B1. インスタンスごとに幅が固定された浮動小数点数 > B2. Mathematica の Real 相当 > B3. それ以外の趣旨で高精度を実現する浮動小数点数 > >のいずれかで divmod まで含めた対応が変わってくると思います. そうですね. >まず B1 として割り切るかどうかという点についてはいかがでしょうか?? >これは新たな機械精度を設けることにほぼ相当します. その通りだと思います. >僕は B2 のイメージが強いので,上に挙げた精度変化の問題を >気にしています.一方,石塚さんが以前出された次の案は >一点を除き B1 とみなせます. ええ. そのとおりです. >1. 同じ精度同士の2項演算はその精度を持つ >2. 単項演算はそのまま >3. 違う精度の2項演算は精度のの悪い方に合わせる > >一点とは,3. が C の double や float の採用している(IEEE754 >由来の)幅の広い方に合わせるというのと異なるために >オーバーフローする機会が増えるという危険をちょっとだけ感じます. オーバフローに関しては, 指数部が桁溢れする場合は Bigfloatのdouble相当 を用いれば良いかと思います(FixnumとBignumの関係ですね) 私は, B1でもB2でもよいと感じています. ただ, B2は計算コストが高いのかなっ て程度です. ただ, B2で嬉しいのは関数を四則演算で近似する場合に自動的に 有効桁数が保証されるのでそういった意味では嬉しいかなとも思います. ですので, コストがそれほど高くないならB2のほうが良いのかなって感じです ね. ># 結局,実用性という問題を考えないといけないわけですが, ># Bigfloat 自体は誰も実用しないのではないかという気もしています. それは(^^;;; 私としては, FixnumのBignumのようにRubyに完全に組み込んでもらっても良い かなと思っていますが... ただ, こうなると B1, B2どちらがふさわしいかと いう議論も変わってきますが... ># 一応,心情を告白しておきますと,僕の Bigfloat の議論に対する関心は ># 数値クラスの設計のために必要なものはなにかという点のみです. ># つまり新たな coerce や Precision がどうあるべきかといったことに ># 関するケーススタディの一つとして向き合っています. なろほど(^^;;; __ ..............................石塚 圭樹@日本ラショナルソフトウェア... ----------------------------------->> e-mail: keiju@rational.com <<---