2.9.2浮点数的比较
由于计算机当中采用有限位的二进制编码,因此浮点数在计算机当中的存储并不总是精确地,例如在大量的计算以后,一个浮点类型的数3.14在计算机当中可能存储成3.1400000000001,也有可能存储成3.1399999999999,这种情况下会对比较操作带来了极大的干扰
于是需要引入一个极小数eps来对这种误差进行修正。
1.等于运算符()
如果一个数落在了[b-eps,b+eps]的区间的之间的时候,就应当判断ab成立,那么eps应当取多少呢?经过经验表明,eps取值为10-8是一个合适的数字,对于大多数的情况部件不会漏判也不会误判因此可以将eps定义为常量1e-8
const double eps=1e-8;
为了使得比较更加的方便,把比较操作写成宏定义的形式
#define Equ(a,b) ((fabs((a)-(b)))
加上这么多的括号也是防止宏定义可能带来的错误,注意:如果想要使用不等于,只需要在使用的时候Equ前面加上一个非运算符!就可以了,(!Equ(a,b)),于是在程序当中就可以使用Equ函数来对浮点数进行比较了
#include#includeconst double eps=1e-8;#define Equ(a,b) ((fabs((a)-(b)))int main(){ double db=1.23;if(Equ(db,1.23)){