在 Scilab 中输出时有没有办法显示超过 25 位数字?
Is there a way to display more than 25 digits when outputting in Scilab?
我正在使用 Scilab 5.5.2,在使用 format
命令时,我最多可以显示 25 位数字。 有没有办法以某种方式显示更多的数字?
Scilab 使用双精度浮点数进行运算;它不支持可变精度算术。双精度表示%eps的相对误差,为2-52,约为2e-16.
这意味着您甚至无法获得 25 位正确的十进制数字:使用 format(25)
时,最后会出现乱码。例如,
format(25); sqrt(3)
returns 1.732050807568877 1931766
我在这里分隔了最后 7 位数字,因为它们是错误的; sqrt(3)
begins with
的正确值
1.732050807568877 2935274
当然,如果你不介意数字错了,你想要多少就多少:
strcat([sprintf('%.15f', sqrt(3)), "1111111111111111111111111111111"])
returns1.7320508075688771111111111111111111111111111111
。
但是如果你想任意超过实数,Scilab 不是适合这项工作的工具(更正: pointed out Multiple Precision Arithmetic Toolbox which might work for you). Out of free software packages, mpmath Python library implements arbitrary precision of real numbers: it can be used directly or via Sagemath or SymPy。商业软件包(Matlab、Maple、Mathematica)也支持可变精度。
至于 Scilab,我建议使用格式化打印命令,例如 fprintf 或 sprintf,因为它们实际上关心输出是否有意义。示例:printf('%.25f', sqrt(3))
returns
1.7320508075688772000000000
用零替换垃圾。最后一个非零数字仍然差1,但至少不是没有意义。
有53位尾数,只能精确到~15-17位。没有理由打印超出此范围的数字。
如果需要 25 位的精度,那么您可以使用 quadruple precision or double-double arithmetic library like ATOMS: Multiple Precision Arithmetic Toolbox details
我正在使用 Scilab 5.5.2,在使用 format
命令时,我最多可以显示 25 位数字。 有没有办法以某种方式显示更多的数字?
Scilab 使用双精度浮点数进行运算;它不支持可变精度算术。双精度表示%eps的相对误差,为2-52,约为2e-16.
这意味着您甚至无法获得 25 位正确的十进制数字:使用 format(25)
时,最后会出现乱码。例如,
format(25); sqrt(3)
returns 1.732050807568877 1931766
我在这里分隔了最后 7 位数字,因为它们是错误的; sqrt(3)
begins with
1.732050807568877 2935274
当然,如果你不介意数字错了,你想要多少就多少:
strcat([sprintf('%.15f', sqrt(3)), "1111111111111111111111111111111"])
returns1.7320508075688771111111111111111111111111111111
。
但是如果你想任意超过实数,Scilab 不是适合这项工作的工具(更正:
至于 Scilab,我建议使用格式化打印命令,例如 fprintf 或 sprintf,因为它们实际上关心输出是否有意义。示例:printf('%.25f', sqrt(3))
returns
1.7320508075688772000000000
用零替换垃圾。最后一个非零数字仍然差1,但至少不是没有意义。
如果需要 25 位的精度,那么您可以使用 quadruple precision or double-double arithmetic library like ATOMS: Multiple Precision Arithmetic Toolbox details