永发信息网

matlab 为什么 a=1e41-1e22;vpa(a,50) 结果还是1e41怎么得出 1e41

答案:2  悬赏:60  手机版
解决时间 2021-03-09 10:18
  • 提问者网友:藍了天白赴美
  • 2021-03-09 02:40
matlab 为什么 a=1e41-1e22;vpa(a,50) 结果还是1e41怎么得出 1e41
最佳答案
  • 五星知识达人网友:梦中风几里
  • 2021-03-09 04:10
1、首先,明确一个基本概念:MATLAB中最基本的数据类型就是double,其大多数数值运算都是按照double类型进行的.楼上引用的百度百科的内容基本上没什么问题,我就不重复了.但是,出现这个现象的原因与double类型的表示范围无关,而是与它的精度(或者说分辨率)有关. MATLAB中有一个eps函数用于计算浮点数的相对精度,在早期的版本(例如6.5),该函数不接受输入参数,而是直接返回一个数2^(-52);而在稍新一些版本的MATLAB上,eps可以接受输入,用以表示对于输入变量而言,其分辨率是多大,例如:>> eps(1e41)ans = 1.9343e+025也就是说,由于双精度浮点数的精度限制,对1e41这个量级的数来说,能够分辨的最小的数大约是1.9343e25,如果与小于这个分辨率的数据进行加减运算,都会被忽略不计. 更深入一点说,按照IEEE-754标准,double类型共64个二进制位,其中1个符号位,11个指数位,52个尾数位.这意味着,浮点数的相对精度是由52个尾数位决定的,这也是上面说到2^(-52)的由来,而2^(-52)按十进制大约是2.22e-16,介于1e-15和1e-16之间,这也是为什么说double类型的有效数字是15-16位的原因(15位肯定准确,16位不一定). 2、要想得到精确的计算结果,需要使用符号运算:>> a = sym(1e41)-sym(1e22) a = 99999999999999999990000000000000000000000你原来的代码中,虽然vpa是符号数学工具箱的函数,但由于前面的运算是按照double类型进行的,得到的结果 a 已经损失了精度,所以再使用vpa也不会有什么作用. 希望上述回答能够解答楼主的疑问(每个字都是现打的,绝无复制粘贴).
全部回答
  • 1楼网友:一秋
  • 2021-03-09 05:25
感谢回答,我学习了
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯