matlab浮点运算的误差,MATLAB的eps,浮点数相对精度

MATLAB的eps函数,官方帮助文档是这么描述的:Floating-point relateive accuracy,也就是浮点数的相对精度。

大家都知道,在数学中,实数有无穷多个,数值可以无限大,精度也可以无限小。而在计算机中,因为表示数值的字长有限,不可能无限地表示一个数的有效数字。所以在计算机中,是没有绝对概念上的无穷大和无穷小的。两个相邻数字(中间不能再有其他数值)的“间隔”,就是一般意义上的相对精度。(相对精度的具体含义可以自行Baidu,也可以参见这个帖子:关于Matlab的eps函数)。

好,下面进入正题:

我在查看eps的帮助文档时,发现文档中提到,eps的输出应该是:

2^(-52)

当时我就不理解了,因为大家直接在MATLAB下面输出,结果肯定是:

2.2204e-16

这不对啊。百思不得其解!有聪明的看官肯定知道我到底犯了什么错误。不过,当时我就是不明白,看了stackoverflow的这个帖子(What‘s the actual value of eps in Matlab?),才知道自己的问题,真是蠢到家了。因为大家只要这么写:

>> 2^(-52)

ans=

2.2204e-16

明白了吧!注意的一点是,如果这么写:

>> 2^(-52) == 2.2204e-16

ans =

0

结果是不对的。因为计算机存储数值的问题,2.2204e-16在存储时,与2^(-52)是不同的,有误差。所以,结果显示二者不同。有经验的同学,应该在判断一个浮点变量是否为零的时候,碰到过类似的事情。注意在判断浮点数是否相等时,不能使用 “==” 符号。

总之,碰到问题还是应该多想想,多试试。

原文:http://www.cnblogs.com/athR/p/3891254.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值