float double是否相等,一定是要在精度范围谈这个事情,实际应用中不可能精确到小数点那么多位的。
浮点数和0之间的比较
const float EPSINON = 0.000001f;
int na= 0x800001;
float a;
memcpy(&a, &na, sizeof(na));
assert (a < EPSINON && a > -EPSINON ) 满足条件,认为相等
float b = 0.0f;
assert (b < EPSINON && b > -EPSINON) 满足条件,认为相等
================================================================
float之间的比较
下面a, b都是非常小的数,
int na= 0x800001;
float a;
memcpy(&a, &na, sizeof(na));
int nb = 0x800002;
float b;
memcpy(&b, &nb, sizeof(nb));
这里不相等,但是在精度范围内,他们是相等的。
if (b == a )
{
printf("a ==b \n");
}
//两个相减,在精度范围内,比如小数点后6位,这个结果是0.000000,即两个数是相等。
float x = b -a;
printf("over b - a %f\n", x);
if (x < EPSINON && x > -EPSINON)
{
printf("x == 0");
}
posted on 2014-08-25 09:34
pizzx 阅读(2900)
评论(0) 编辑 收藏 引用 所属分类:
c++/boost