1.6.2, float 变量与“零值”进行比较
float 变量与“零值”进行比较的 i f语句怎么写?
float fTestVal = 0.0;
A), if(fTestVal == 0.0); if(fTestVal != 0.0) ;
B), if((fTestVal >= -EPSINON) && (fTestVal < = EPSINON) ); //EPSINON 为定义好的
精度。
哪一组或是那些组正确呢?我们来分析分析:
float 和 double 类型的数据都是有精度限制的,这样直接拿来与 0.0 比,能正确吗?明显
不能,看例子: π的值四舍五入精确到小数点后 10 位为: 3.1415926536,你拿它减去
0.00000000001 然后再四舍五入得到的结果是多少?你能说前后两个值一样吗?
EPSINON 为定义好的精度,如果一个数落在[0.0-EPSINON,0.0+EPSINON] 这个闭区间
内,我们认为在某个精度内它的值与零值相等;否则不相等。扩展一下,把 0.0 替换为你想
比较的任何一个浮点数,那我们就可以比较任意两个浮点数的大小了,当然是在某个精度
内。

π的例子好像不是跟 0.0 比较
我也举个例子好了,元电荷的电量是1.6×10⁻¹⁹C,拿它减去0.00000000001大概结果就跟原数相差很大了。另一方面阿伏加德罗常数6.02×10²³mol⁻¹哪怕减去10000000000也不会改变多少。看来直接跟“定义好的精度”比较好像还不是很科学
顺带一提,极小值一般拼作 EPSILON