matlab双精度混淆

时间:2016-07-06 08:30:24

标签: matlab wolfram-mathematica precision

默认情况下,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位?

1 个答案:

答案 0 :(得分:2)

#include <stdio.h> void main(void) { printf("%s\n", __FILE__); } 的{​​{1}}页面对此进行了解释,此处为link.

  

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

     

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

     

首先,证明vpa无法恢复a的精度   双精度输入。调用vpa的双精度结果和   相同的象征性结果。

所以答案是,Matlab足够聪明,可以恢复你的表达,因为它的格式为df$p_value <- apply(df,1,function(x) fisher.test(matrix(x[-1],nrow=2))$p.value)