1.两个浮点数为什么不能像整数那样直接用==比较是否相等?
因为浮点数有精度问题。
2.浮点数为什么会有精度问题?
在计算机中,数字都是以二进制的形式存在的,由于浮点数在十进制转为二进制的过程中,常常不能正好转到完全相等(例如1.0/3.0这样的数必然会损失,而像1.0/5.0这种数才不会有任何损失),所以就产生了精度问题。
3.如何实现浮点数的比较?
小浮点数的比较采用绝对误差法;
大浮点数的比较采用相对误差法;
对于一般的浮点数必须采用相对误差和绝对误差相结合的方式才可以达到目的。
bool IsEqual(double a,double b,double e1,double e2)
{
if (a==b||fabs(a-b) if (fabs(a)>fabs(b)) return (fabs((a-b)/a)>e2)?1:0;
return (fabs((a-b)/b)>e2)?1:0;
}