私はScilab 5.5.2で作業しています。format
コマンドを使用するときは、最大25桁の数字を表示できます。 何とかこの数字よりも多くを表示する方法はありますか?Scilabで出力するときに25桁以上を表示する方法はありますか?
注:「なぜ私は25桁を超えて表示する必要がありますか?それは実際には問題から外れるはずの長い話です。
私はScilab 5.5.2で作業しています。format
コマンドを使用するときは、最大25桁の数字を表示できます。 何とかこの数字よりも多くを表示する方法はありますか?Scilabで出力するときに25桁以上を表示する方法はありますか?
注:「なぜ私は25桁を超えて表示する必要がありますか?それは実際には問題から外れるはずの長い話です。
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だけオフになっていますが、少なくともそれは無意味ではありません。
Scilab uses double-precision floating-point type 53ビットの仮数を持ち、〜15〜17桁までしか正確でない場合があります。それ以上の数字を印刷する理由はありません。
精度の25桁の数字は、その後、あなたがもっと精度が必要な場合は、唯一の方法はmpscilab、Xnum、などのような任意精度ライブラリを使用しているATOMS: Multiple Precision Arithmetic Toolbox details
ようquadruple precisionまたはdouble-double arithmeticライブラリを使用することができます必要な場合..
私の質問のキーワードは、 "計算"ではなく "表示"です。私はScilabの計算の精度を上げるのではなく、どれほど正確であるかにかかわらず、より多くの桁数を表示するだけではありません。あなたの答えをありがとう。 –
私はScilabを使い慣れていませんが、おそらくprintf関数を探していたはずです。ありがとう、それは私が必要としていたものです。 –