2016-06-23 64 views

回答

1

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

这意味着,你甚至不能得到正确的25个十进制数字:使用格式(25)当你在最后得到的垃圾。例如,

format(25); sqrt(3) 

回报1.732050807568877 1931766

我这里分离的最后7个位数,因为他们是错误的;开方的正确值(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,但至少它不是毫无意义的。

+0

我是新来的Scilab,但我应该考虑搜索printf函数。谢谢,这正是我需要的。 –

0

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

如果需要精确的数字25,那么你可以使用quadruple precisiondouble-double arithmetic库像ATOMS: Multiple Precision Arithmetic Toolbox details

如果您需要更精密那么唯一的方法是使用一个任意精度的图书馆像mpscilabXnum等。

+0

我的问题的关键字是“显示”而不是“计算”。我不打算提高Scilab的计算精度,只是为了显示更多的数字,不管它们有多正确。尽管谢谢你的回答。 –

相关问题