matlab中显示精度的问题
matlab初学者,有问题请教大家。我想问一下,既然matlab中默认的数字输出类型是双精度的,那么计算结果应该是十六位的,但是使用digits函数可以看到更高位的有效数...
matlab初学者,有问题请教大家。我想问一下,既然matlab中默认的数字输出类型是双精度的,那么计算结果应该是十六位的,但是使用digits函数可以看到更高位的有效数字。比如说,digits 100,然后 vpa(pi),就看到pi的100位有效数字,这是为什么呢?
展开
3个回答
展开全部
楼上的回答都没有切中实质。楼主的问题涉及到数值计算和符号运算的概念。
所谓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
写了半个多小时,希望对楼主有帮助。
所谓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
写了半个多小时,希望对楼主有帮助。
光点科技
2023-08-15 广告
2023-08-15 广告
通常情况下,我们会按照结构模型把系统产生的数据分为三种类型:结构化数据、半结构化数据和非结构化数据。结构化数据,即行数据,是存储在数据库里,可以用二维表结构来逻辑表达实现的数据。最常见的就是数字数据和文本数据,它们可以某种标准格式存在于文件...
点击进入详情页
本回答由光点科技提供
2013-09-23
展开全部
计算机内部的存储和运算都是二进制的,一般双精度就是8个字节,字节足够多才能表示的精度更高,但是会耗费更多的内存,并降低CPU的计算效率。而且,字节数不同,其对应的机器实现也是有所区别的,一般的计算机语言不外乎常用的单字节,双字节,四字节,八字节变量,这些对付一般应用都足矣。matlab的 这两个组合命令,其实是一种软实现,将机器中存储的多个八字节变量作为一个整体,通过软件内部的算法实现运算的。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
请看 IEEE754标准
在百度搜索
C语言重难点精讲系列视频03——浮点型数据的格式IEEE754标准
在百度搜索
C语言重难点精讲系列视频03——浮点型数据的格式IEEE754标准
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询