You can written a fuzz function
ie.
bool fuzz(const double& value,const double& compare, const double& fz) {
return (value >= compare-fz && value <= compare+fz) ;
}
c = fuzz(c,0.0,1e-8) ? 0.0 : c ; // fuzz in -0.0000001 <-> 0.00000001
or
c = fuzz(c,100.0,1e-8) ? 100.0 : c ; // fuzz in 99.9999999 <-> 100.0000001
浮点数的精确判断十分困难,但在一定的精度范围比较是简单的。
我已经写出这个函数给你参考了。
/*********************************************************
* Compare two float with precise *
* return value > 0, float one > float two *
* return value = 0, float one = float two *
* return value < 0, float one < float two *
*********************************************************/
int cmpFloat(float one, float two, unsigned int precise)
{
#define MAXFLOATLENGTHINDEC 128
char buffer1[MAXFLOATLENGTHINDEC];
char buffer2[MAXFLOATLENGTHINDEC];