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)是不同的,有误差。所以,结果显示二者不同。有经验的同学,应该在判断一个浮点变量是否为零的时候,碰到过类似的事情。注意在判断浮点数是否相等时,不能使用 “==” 符号

  

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

posted @ 2014-08-04 23:24  @hR  阅读(3921)  评论(0编辑  收藏  举报