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