c++浮点数比较问题

C/C++中非常重要的原则:

The important rule to remember is that powers of two and integer multiples thereof can be perfectly represented. everything else is an approximation.

除了可以表示为2的幂次以及整数数乘的浮点数可以准确表示外,其余的数的值都是近似值。

例如,1.5可以精确表示,因为1.5 = 3*2^(-1);然而12.3却不能精确表示,因为它并不满足这一规则。
c++浮点数比较问题
很容易看出a为12.3 但调试却不是12.3
然后我们来把他和12.3作下比较
c++浮点数比较问题
根据上面的解释我们也很容易想到输出的肯定为0
那么我们要怎么比较呢
我们可以定义一个精度 如果相减小于这个精度默认他们相等
可用下面的宏表示
#define Equ(a, b) ((fabs((a) - (b))) < (eps))