float 比较【转】
2013-08-14 16:00:18
分类: C/C++
(1)浮点数的表示是不精确的,不能直接比较两个数是否完全相等,一般都是在允许的某个范围内认为像个浮点数相等。 if ((x >= - EPSINON) && (x <= EPSINON)) 浮点型变量并不精确,其中EPSINON是允许的误差(即精度),所以不可将float变量用“==”或“!=”与数字比较,应该设法转化成“>=”或“<=”形式。如果写成if (x == 0.0),则是错误的。 因为1.0在计算机中可能存为0.999999或1.00001等,很难恰好是1.0 ----------------- 4.3.3 浮点变量与零值比较 【规则4-3-3】不可将浮点变量用“==”或“!=”与任何数字比较。 千万要留意,无论是float 还是double 类型的变量,都有精度限制。所以一定要 避免将浮点变量用“==”或“!=”与数字比较,应该设法转化成“>=”或“<=”形式。 假设浮点变量的名字为x,应当将 if (x == 0.0) // 隐含错误的比较 转化为 if ((x>=-EPSINON) && (x<=EPSINON)) 其中EPSINON 是允许的误差(即精度)。 |
|