MATLAB知识点:易错点:判断浮点数是否相等

​讲解视频:可以在bilibili搜索《MATLAB教程新手入门篇——数学建模清风主讲》。​

MATLAB教程新手入门篇(数学建模清风主讲,适合零基础同学观看)_哔哩哔哩_bilibili


节选自第3章 3.4.3 关系运算

下面我们再来看一个易错点:

判断浮点数是否相等

先给大家简单介绍下什么是浮点数,浮点数是计算机科学中用于近似表示实数的一种数值表示法。简单来说,浮点数由两部分组成:一个表示数字的部分(称为尾数)和一个表示数字所在位置的指数。例如,数字1234.56可以写成1.23456×10^3,其中1.23456是尾数,3是指数。-2.7756\times10^{-17}

有编程基础的同学应该知道,计算机中的数据是使用二进制0和1来保存的,例如十进制表示的3在二进制中表示为11。虽然十进制能精确表示如0.1这样的数,但在二进制中,0.1却需要表示为一个无限循环的小数0.00011001100110011…。由于计算机的内存是有限的,这导致了它无法精确表示0.1这样的数值。计算机在处理这类数字时会进行截断或舍入,所以使用浮点数计算时可能会产生误差。

MATLAB中的浮点数分为两种,分别是双精度(double)浮点数和单精度(single)浮点数,两种浮点数能表示的数值的范围有所不同。默认情况下我们创建的向量或者矩阵中的元素都是使用双精度浮点数表示的,对这部分内容感兴趣的同学可点击下方链接,MATLAB的官网有详细介绍两种的区别:https://ww2.mathworks.cn/help/matlab/matlab_prog/floating-point-numbers.html。

大家可以尝试计算  0.5-0.4-0.1,这是我的MATLAB返回的结果:

理论上C应该等于0,但由于浮点数计算的误差,MATLAB得到的C约为-2.7756\times10^{-17},这是一个非常接近0的数。当我们试图判断C是否等于0时,MATLAB返回逻辑0,即MATLAB认为C不等于0,这显然不是我们期望的结果。

那么我们应该怎样判断两个浮点数相等呢?

解决方法:使用一个很小的正数来比较浮点数,而不是直接使用双等号(==)判断。我们将这个很小的正数称为容差(tolerance,简称为tol),例如要比较A和B两个数是否相等,只需要满足: \left | A-B \right | \le tol,这里的容差tol通常取一个非常小的正数,例如tol可取成1e-12(10的-12次方)。tol越小,判断两个浮点数相等的要求越严格。

当然,并非MATLAB中所有的浮点数计算都会出现误差。例如,如果我们仅交换0.1和0.4的位置:

总之,当我们需要判断两个浮点数是否相等时,务必要考虑到计算的误差。感兴趣的同学可以进一步搜索和学习有关浮点数的知识。

你可能感兴趣的:(MATLAB知识点详解,数学建模,matlab)