【问题标题】:matlab double precision confusionmatlab双精度混淆
【发布时间】:2016-11-08 05:43:06
【问题描述】:

Matlab 默认将输入设置为双精度,所以如果我输入a=1/3 则变量将转换为双精度

>> a=1/3
    a =0.3333

>> whos('a')
    a         1x1                 8  double  

但是,当我之后输入vpa(a,100) 时,我得到:

ans=0.3333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333

我的问题是

既然a是双精度的,只有8个字节来存储它的数据,为什么vpa(a,100)能有100位的精度呢?总之,Matlab如何将a的精度从'double'提升到100位?

【问题讨论】:

    标签: matlab wolfram-mathematica precision


    【解决方案1】:

    这在vpadoc页面中有解释,这里是link.

    vpa 恢复常见双精度输入的精度

    与精确的符号值不同,双精度值本质上是 包含舍入误差。当您以双精度调用 vpa 时 输入,vpa 无法恢复丢失的精度,即使它返回 比双精度值更多的位数。但是,vpa 可以 识别并恢复 p/q 形式的表达式的精度, pπ/q、(p/q)1/2、2q 和 10q,其中 p 和 q 是中等大小的整数。

    首先,证明 vpa 无法恢复 双精度输入。对双精度结果调用 vpa 并且 相同的符号结果。

    所以答案是,Matlab 足够聪明,可以恢复你的表情,因为它的形式是p/q

    【讨论】:

    • 首先谢谢,这真的很有帮助!所以Matlab知道变​​量的原始形式,即使这个变量以双精度存储并以小数显示?
    • @lixxee 它不知道;它只是 guesses 从双精度形式(这是它所知道的全部)。例如,如果vpa 的输入正好是3.141592653589793,它猜测您的意思是 pi 的实际值(具有无限多个小数)
    猜你喜欢
    • 2014-04-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-27
    • 1970-01-01
    • 1970-01-01
    • 2012-01-20
    相关资源
    最近更新 更多