我编写了一个小程序出现了这种情况,请大家帮忙分析:
 大体是这样的:
          float a,b;
          if(a/b<=c) 
          {}
         结果是如果a/b恰好等于c时结果为假
          但是将a/b的结果赋值给d,在和c比较就是真.为什么?
    

解决方案 »

  1.   

    我们说的float是十进制的,而内存里的float是二进制的。互相转换过程中会有误差,虽然这个误差很小,但足以影响判断是否相等的结果。以下来自:高质量C++/C编程指南(林锐)4.3.3 浮点变量与零值比较l         【规则4-3-3】不可将浮点变量用“==”或“!=”与任何数字比较。    千万要留意,无论是float还是double类型的变量,都有精度限制。所以一定要避免将浮点变量用“==”或“!=”与数字比较,应该设法转化成“>=”或“<=”形式。    假设浮点变量的名字为x,应当将   if (x == 0.0)  // 隐含错误的比较转化为 if ((x>=-EPSINON) && (x<=EPSINON))其中EPSINON是允许的误差(即精度)。