2012-04-10 5 views
1

私は、RubyのBigDecimalクラスの目的は、無制限に であり、スピードを犠牲にして任意の精度であると考えました。間違っ:Rubyの平方根はBigDecimal.sqrtより精度が高いですか?

> BigDecimal(4).sqrt(4) 
=> #<BigDecimal:906602c,'0.1999999999 9999999998 66602351E1',36(36)> 
> BigDecimal(4).sqrt(11) 
=> #<BigDecimal:9e36850,'0.2E1',9(45)> 

まず、sqrtは少なくとも文書により、パラメータなしで動作するはずです。第2に、そのパラメータが精度の場合、この操作では4で十分です(少なくとも、11桁の精度は問題ありません)。

私が最後に望むのは、ホイールを再現し、自分の「任意の正確な二乗ライブラリ」を作成することです。

質問:

  • 以上が起こらないように、BigDecimalのインスタンスにパラメータを設定することが可能ですか? (意味:低い精度で適切な結果を返します)
  • BigDecimalオブジェクトに関する詳しい情報はありますか?

システム:Debianは、32ビット、ルビーはinspectため1.9.3p125

+0

もう一度あなたの質問がありますか? (私はあなたが基本的にこの問題を文句を言うのに使っている問題を理解していますが、スタックオーバーフローから何を探しているのかは分かりません)Just _ "[BigDecimalの文書](http:// ruby-doc.org/stdlib-1.9.3/libdoc/bigdecimal/rdoc/BigDecimal.html)"_? – Phrogz

+0

"無限に正確な" sqrtを作成するには、無限のメモリが必要です。あなたはそれを持っていないと思います。何が間違っている? –

+0

@VictorMoroz私はたくさんの記憶を持っていますが、私の驚いたことに、4の平方根は2ではなく、任意の正確なライブラリでこの問題にぶつかります。 – karatedog

答えて

1

大きな小数のドキュメントは、どのようなその出力手段を説明します。ドキュメントのバグのようですsqrtのドキュメントについて

- あなたが取得している出力用としてhttp://bugs.ruby-lang.org/issues/5267

を参照してください、私はわからない - 私は両方のケースで0.2E1を取得します。

+0

_任意の精度_1.0/3.0のような終端でない番号の場合の*最大精度の意味は何ですか?私は、_precision_は、任意の精度があらかじめハード限界を設定するべきではないので、私によって設定されたものだと思っていました。 – karatedog

+0

任意は無限と同じではありません。あなたは任意の精度(10桁の数字、100など)を求めることができますが、事前に選択する必要があります。 –

+0

これはまさに私が書いたものです。しかしBigDecimalはそれ自身である程度正確な値を選ぶようです。 – karatedog