为什么浮点数不能和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)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值