#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.