在Scilab中输出时,有没有办法显示超过25位数?

时间:2016-06-23 17:06:53

标签: floating-accuracy scilab

我正在使用Scilab 5.5.2,当使用format命令时,我最多可以显示一个数字的25位数字。 有没有办法以某种方式显示超过这个数字?

注意:我理解“为什么我需要查看超过25位的数字?”但这是一个长篇故事应该真的不容忽视。

2 个答案:

答案 0 :(得分:1)

Scilab采用双精度浮点数运算;它不支持变精度算术。双精度意味着%eps的相对误差,即2 ^( - 52),大约2e-16。

这意味着你甚至无法获得25个正确的十进制数字:当使用格式(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实现了实数的任意精度:可以直接使用,也可以通过SagemathSymPy使用。商业软件包(Matlab,Maple,Mathematica)也支持可变精度。

至于Scilab,我建议使用格式化的打印命令,例如fprintf或sprintf,因为它们实际上关心输出是否有意义。示例:printf('%.25f', sqrt(3))返回

1.7320508075688772000000000 

用零替换垃圾。最后一个非零数字仍然是1,但至少它没有意义。

答案 1 :(得分:0)

Scilab uses double-precision floating-point type有53位尾数,只能精确到15-17位数。除此之外没有理由打印数字。

如果需要25位精确度,那么您可以使用quadruple precisiondouble-double arithmetic库,例如ATOMS: Multiple Precision Arithmetic Toolbox details

如果您需要更高的精度,那么唯一的方法是使用任意精度库,如mpscilabXnum等......