【问题标题】:Is there a way to display more than 25 digits when outputting in Scilab?在 Scilab 中输出时有没有办法显示超过 25 位?
【发布时间】:2016-10-26 03:40:18
【问题描述】:

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

【问题讨论】:

    标签: floating-accuracy scilab


    【解决方案1】:

    Scilab 使用双精度浮点数进行运算;它不支持可变精度算术。双精度表示%eps的相对误差,为2-52,约2e-16。

    这意味着您甚至无法获得 25 个正确的十进制数字:当使用 format(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 不是适合这项工作的工具(更正:phuclv 指出Multiple Precision Arithmetic Toolbox 可能对您有用)。在免费软件包中,mpmath Python library 实现了实数的任意精度:可以直接使用,也可以通过SagemathSymPy 使用。商业软件包(Matlab、Maple、Mathematica)也支持可变精度。

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

    1.7320508075688772000000000 
    

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

    【讨论】:

    • 我是 Scilab 的新手,但我可能应该考虑搜索 printf 函数。谢谢,正是我需要的。
    【解决方案2】:

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

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

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

    【讨论】:

    • 我的问题的关键字是“显示”而不是“计算”。我不想提高 Scilab 计算的精度,只是为了显示更多的数字,无论它们多么正确。不过谢谢你的回答。
    猜你喜欢
    • 2020-03-31
    • 2021-02-27
    • 1970-01-01
    • 2011-09-21
    • 2018-01-12
    • 2020-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多