请写出 float x 与“零值”比较的 if 语句:
const float EPSINON = 0.00001;
if ((x >= - EPSINON) && (x <= EPSINON)
不可将浮点变量用“==”或“!=”与数字比较,应该设法转化成“>=”或“<=”此类形式。
解析:
一个区间内有无限个实数,因此计算机的浮点类型不能表示所有数,浮点数通常只是实际值的近似值,如5.0可能被储存为4.99999。因此两个浮点数比较时,只要两数之间的差距小于一定区间,就可以认为它们是相等的。这个区间大小按实际情况确定。
以下内容引用自林锐《高质量C/C++代码编写指南》
4.3.3 浮点变量与零值比较
? 【规则4-3-3】不可将浮点变量用“==”或“!=”与任何数字比较。
千万要留意,无论是float还是double类型的变量,都有精度限制。
所以一定要避免将浮点变量用“==”或“!=”与数字比较,
应该设法转化成“>=”或“<=”形式。
假设浮点变量的名字为x,应当将
i
f (x == 0.0) // 隐含错误的比较
转化为
if ((x>=-EPSINON) && (x<=EPSINON))
其中EPSINON是允许的误差(即精度)。