默认情况下,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的精度从“双”提高到100位?
发布于 2016-07-06 08:36:15
这是在doc页面vpa中解释的,下面是链接。
vpa恢复普通双精度输入的精度 与精确的符号值不同,双精度值本质上包含舍入误差.当您对双精度输入调用vpa时,vpa无法恢复丢失的精度,尽管它返回的数字比双精度值多。但是,vpa可以识别和恢复p/q、pπ/q、(p/q)1/2、2q和10q的表达式的精度,其中p和q是中等大小的整数。 首先,证明vpa不能恢复双精度输入的精度.对双精度结果和相同的符号结果调用vpa。
所以答案是,Matlab足够聪明地恢复您的表达式,就像它的形式p/q一样。
https://stackoverflow.com/questions/38219486
复制相似问题