计算机对单精度浮点数的比较。
只可能是 数学意义上不相等的,处理成相等,因为精度毕竟有限。
如果是数学意义上相等,却处理成相等。这是不可能的。
你说的,不能使用 a == b比较。
应该是这么比较
float temp = fabs(a - b);
if ( -0.000001 < temp && temp < 0.000001)追问fabsf 是求绝对值吗?
我尝试设定这几个宏
#define EPSILON_E4 (float)(1E-4)
#define EPSILON_E5 (float)(1E-5)
#define EPSILON_E6 (float)(1E-6)
#define CompareFloatA(a,b) ((fabs(a-b)<EPSILON_E4) ? 1 : 0)
#define CompareFloatB(a,b) ((fabs(a-b)/a < EPSILON_E4 || fabs(a-b)/b < EPSILON_E4) ? 1 : 0)
#define CompareFloatC(a,b) ((fabs(a-b)/a < EPSILON_E4 && fabs(a-b)/b < EPSILON_E4) ? 1 : 0)