matlab中显示精度的问题

matlab初学者,有问题请教大家。我想问一下,既然matlab中默认的数字输出类型是双精度的,那么计算结果应该是十六位的,但是使用digits函数可以看到更高位的有效数字。比如说,digits 100,然后 vpa(pi),就看到pi的100位有效数字,这是为什么呢?

楼上的回答都没有切中实质。楼主的问题涉及到数值计算和符号运算的概念。

所谓MATLAB默认的数据类型是双精度浮点数(double),那是针对普通的数值计算而言的,按照IEEE 754的规范,双精度浮点数有52个尾数位,按十进制理解,大约有16位有效数字。

除了基本的数值计算之外,MATLAB还提供了符号数学工具箱(Symbolic Math Toolbox)。能够进行符号运算的软件称为“计算机代数系统”(Computer Algebra System),比较著名的计算机代数系统包括Maple、Mathematica等。MATLAB自身并不具备符号运算的能力,但通过其它的符号运算内核支持(早期用的是Maple,2008年之后改为MuPad),通过定义一套访问符号运算内核的接口函数,可以实现符号运算(也就是符号数学工具箱)。

符号运算的典型应用包括求函数微积分、极限、表达式的变形和化简等等,所求出的解是无误差的。符号运算还有一个重要应用,就是高精度求值,或者所谓任意精度算术(Arbitrary-precision arithmetic),MATLAB中称为可变精度算术(Variable precision arithmetic),也就是楼主所调用的vpa函数,理论上可以实现任意位有效数字的计算。

楼主所调用的digits和vpa函数都属于符号数学工具箱的函数,它们的实现并非通过MATLAB基本的双精度浮点数,这就是问题之所在。

至于说符号运算是怎样实现的,这个问题太宏大,楼主有兴趣的可以参考一下维基百科的一些内容:
http://zh.wikipedia.org/wiki/%E8%AE%A1%E7%AE%97%E6%9C%BA%E4%BB%A3%E6%95%B0%E7%B3%BB%E7%BB%9F
http://zh.wikipedia.org/wiki/%E8%AE%A1%E7%AE%97%E6%9C%BA%E4%BB%A3%E6%95%B0%E7%B3%BB%E7%BB%9F%E6%AF%94%E8%BE%83
http://en.wikipedia.org/wiki/Arbitrary-precision

写了半个多小时,希望对楼主有帮助。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-09-23
计算机内部的存储和运算都是二进制的,一般双精度就是8个字节,字节足够多才能表示的精度更高,但是会耗费更多的内存,并降低CPU的计算效率。而且,字节数不同,其对应的机器实现也是有所区别的,一般的计算机语言不外乎常用的单字节,双字节,四字节,八字节变量,这些对付一般应用都足矣。matlab的 这两个组合命令,其实是一种软实现,将机器中存储的多个八字节变量作为一个整体,通过软件内部的算法实现运算的。
第2个回答  2013-09-23
请看 IEEE754标准
在百度搜索
C语言重难点精讲系列视频03——浮点型数据的格式IEEE754标准

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网