2016-06-23 2 views

答えて

1

Scilabは倍精度浮動小数点数で動作します。可変精度の算術演算をサポートしていません。倍精度は%epsの相対誤差を意味し、2 ^( - 52)、約2e-16です。

これは、25桁の正しい10進数を取得できないことを意味します。フォーマット(25)を使用すると、最後にガベージが表示されます。彼らは間違っているので、例えば、

format(25); sqrt(3) 

戻り1.732050807568877 1931766

は、私はここで最後の7桁の数字を分離。あなたは間違っている数字を気にしない場合はsqrtの正しい値は(3)begins with

 1.732050807568877 2935274 

もちろん、あなたが望む限り多くを持つことができます。

strcat([sprintf('%.15f', sqrt(3)), "1111111111111111111111111111111"]) 

戻り1.7320508075688771111111111111111111111111111111

しかし、実数を任意に超過したい場合、Scilabは仕事に適したツールではありません(訂正:Lưu Vĩnh Phúcはあなたのために働くかもしれないMultiple Precision Arithmetic Toolboxを指摘しました)。フリーソフトウェアパッケージのうち、mpmath Python libraryは、実数の任意の精度を実装しています。これは直接またはSagemathまたはSymPyを介して使用できます。商用パッケージ(Matlab、Maple、Mathematica)も可変精度をサポートしています。

Scilabについては、fprintfやsprintfなどの書式設定された印刷コマンドを使用することをおすすめします。これは、出力が意味をなさないことに実際気づいているからです。例:printf('%.25f', sqrt(3))

1.7320508075688772000000000 

を返します。ごみはゼロで置き換えられます。最後の0でない桁はまだ1だけオフになっていますが、少なくともそれは無意味ではありません。

+0

私はScilabを使い慣れていませんが、おそらくprintf関数を探していたはずです。ありがとう、それは私が必要としていたものです。 –

0

Scilab uses double-precision floating-point type 53ビットの仮数を持ち、〜15〜17桁までしか正確でない場合があります。それ以上の数字を印刷する理由はありません。

精度の25桁の数字は、その後、あなたがもっと精度が必要な場合は、唯一の方法はmpscilabXnum、などのような任意精度ライブラリを使用しているATOMS: Multiple Precision Arithmetic Toolbox details

ようquadruple precisionまたはdouble-double arithmeticライブラリを使用することができます必要な場合..

+0

私の質問のキーワードは、 "計算"ではなく "表示"です。私はScilabの計算の精度を上げるのではなく、どれほど正確であるかにかかわらず、より多くの桁数を表示するだけではありません。あなたの答えをありがとう。 –

関連する問題