浮点数判断零值问题

 

 

#include <stdio.h>
void main()
{
int i,n=3,iso=1;
float a=1.2f,b=1.1f,c=1.3f,t0.0;
for (i=1;i<n-1;i++)
{
t=2*a-b-c; //t 值这里等于零,可是为什么(t!=0)返回真??
if (t!=0.0f)
{
iso=0;
break;
}
}
printf("iso=%d/n",iso);
}

初看时,都以为是输出iso=1

而实际的输出是:iso=0
下面我将使用浮点数知识,来解开这个疑问.
相关知识,请查看:
http://hi.baidu.com/aauutthh/blog/item/d835adeddecccad1b21cb123.html

a=1.2f//内存数为:0x3f99 999a
b=1.1//          0x3f8c cccd
c=1.3//          0x3fa6 6666
t=0.0//          0x0000 0000

a:  0   01111111    001 1001 1001 1001 1010
2a: 0   01111111    011 0011 0011 0011 0100

b:  0   01111111    000 1100 1100 1100 1101
c:  0   01111111    010 0110 0110 0110 0110
b+c:0   01111111    011 0011 0011 0011 0011

t:  0   01111111    000 0000 0000 0000 0001
在这里,可以看出,t为什么不等于零了吧.


所以浮点数判断0一般形式为:
if(fabs(floatNum)<1e-5) statement;
根据精度要求,选择合适的指数,如1e-5,表示小数点后5位为0.

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值