C++入门——浮点数与零值比较

各类型变量与“零值”比较

不同变量与零值比较方法不一样,但常常存在一些错误的用法。例如,把bool类型变量var与0的比较写成if(var == 0);把int型变量与零值比较写成if(!var);把指针变量var与零值的比较写成if(!var)。虽然上述写法能正确运行,但未能清晰表达程序的意思。

正确的做法

  1. 一般地,如果想使用if一个变量var是真还是假,可以直接使用if(var)if(!var),表明其为“逻辑判断”

  2. 如果用if判断一个数值型变量var(如short、int、long等),应该用if(var == 0),表明是与0进行数值上的比较

  3. 如果判断指针最好使用if(var == NULL)

  4. 对于浮点数的比较,首先要考虑到浮点型变量在内存中的存储机制与整型不同,有舍入误差,导致它并不是一个精确的数。在判断浮点数相等时,推荐使用范围来确定,若x在某一范围内,就认为相等,范围的定义要根据实际情况而定,float和double也各有不同,所以都不可以用“==”或“!=”与任何数字比较,应该设法转化成“>=”或“<=”某个精度值。具体方式如下:

const float EPSINON = 0.00001;
if ((x >= EPSINON) && (x <= EPSINON))

这里EPSINON的取值是0.00001,而一般该值的选取按照实际情况设置。

需要注意的是,因为浮点数的精度误差,导致对于确切的两个浮点数a与b,a+b的值和b+a的值永远是相等的,而浮点数的运算是不可结合的,所以(a+b)+c的值和a+(b+c)的值就不一定相等了。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值