我正在使用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个十进制数字:使用格式(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实现了实数的任意精度:它可以直接使用或通过Sagemath或SymPy使用。商业软件包(Matlab,Maple,Mathematica)也支持可变精度。
至于Scilab的,我建议使用格式化的打印命令如fprintf中或sprintf的,因为他们真正关心的输出端与意义。示例:printf('%.25f', sqrt(3))
返回
1.7320508075688772000000000
用垃圾替换为零。最后一个非零数字仍然是1,但至少它不是毫无意义的。
Scilab uses double-precision floating-point type具有尾数的53位,并且只能精确到〜15-17的数字。除此之外,没有理由打印数字。
如果需要精确的数字25,那么你可以使用quadruple precision或double-double arithmetic库像ATOMS: Multiple Precision Arithmetic Toolbox details
我的问题的关键字是“显示”而不是“计算”。我不打算提高Scilab的计算精度,只是为了显示更多的数字,不管它们有多正确。尽管谢谢你的回答。 –
我是新来的Scilab,但我应该考虑搜索printf函数。谢谢,这正是我需要的。 –