为什么浮点数不能和0直接比较

在嵌入式软件中,一般不建议将浮点数和0直接做比较,例如:

float a;
exp1. if (a == 0)
exp2. if (a >= 0)
exp3. if (a <= 0)
exp4. if (a - 1 == 0)

诸如此类,都是不可取的,这里就和浮点数在计算机内存中的表示方法有关系了,比如浮点数1.0f在内存中可能为0.99999xxx,并不是一个精确的1.0f,并且浮点数0.0f在也有可能为0.00000xxx,具体值是多少,可以在IAR中查看。因此直接做比较,可能会造成误判。

正确的做法应该是,用一个极小值来代替0.0f,如下:

#define FLOAT_ZERO 1e-9
float a;
exp1. if (a <= FLOAT_ZERO)
exp2. if (a >= FLOAT_ZERO)
exp3. if (a <= FLOAT_ZERO)
exp4. if (a - 1 <= FLOAT_ZERO)

你可能感兴趣的:(嵌入式软件开发常见问题,单片机,嵌入式硬件,c语言)