永发信息网

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

答案:2  悬赏:60  手机版
解决时间 2021-03-09 10:18
matlab 为什么 a=1e41-1e22;vpa(a,50) 结果还是1e41怎么得出 1e41
最佳答案
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也不会有什么作用. 希望上述回答能够解答楼主的疑问(每个字都是现打的,绝无复制粘贴).
全部回答
感谢回答,我学习了
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
句晴私人影院怎么去啊,有知道地址的么
坚果PRO对比魅族Pro6,究竟谁的颜值高
女生如何看待男生喷香水?
元旦手抄报资料五十字
福兴街/赊店路(路口)怎么去啊,有知道地址的
【凝聚力的重要性】班级凝聚力的重要性为什么
steam绑定手机令牌之后交易
香缤国际城玫瑰苑5号楼有没有五证
豪爵摩托车车头甩是怎么回事
鼻翼出痘痘是什么原因
自游岛酒店我想知道这个在什么地方
泰顺到龙泉的汽车中途可以上客吗
玩lol要怎样能不锁屏玩着顺手
汇丰在线是不是环亚旗下
【什么是依法治国】什么是依法治国?实行依法
推荐资讯
请问在美丽说开店需要多少保证金呢?可以不交
交通路幼儿园地址在什么地方,想过去办事
涟源四中高考录取分数
朋友圈停用了会怎么样
我的世界床遗失了,我睡过觉的,怎么找到家啊
edius多机位剪辑后怎么输出
出国旅游怎么找当地会说中文的导游
我想在招商银行买货币基金,好不好
小型中药打粉机多少钱一台
万福客这个地址在什么地方,我要处理点事
西北电力建设第三工程有限公司地址在哪,我要
二级建造师考试报名流程?
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?