- 在C/C++中,我们经常要使用浮点型数据表示变量,那么对于浮点数就设计到精度问题,如何判断两个浮点数是否相等呢?
- 比如当我们比较来个实数a和b是否相等时,可以将其转换成浮点数进行比较,但当我们比较1.0000001和1.0在绝大数情况下都是相等的,这就设计到浮点数的精度问题。此时我们引入一个宏常量eps_0,一般设置为很小的数,如1e-6或1e-7,直观来说就是两个数相差很少时就认为它是相等的。
- 所以设计如下的C++代码。
bool isEqual(const double a, const double b) {
const eps_0 = 1.0e-6, rel_error = 10e-4;
bool isEqualFlag = FALSE;
if (fabs(a-b)<=eps_0) {
isEqualFlag = TRUE;
}
else {
if(fabs(a) >= 1000.0) {
if(fabs(a-b)<=rel_error*fabs(a)) {
isEqualFlag = TRUE;
}
}
}
return isEqualFlag;
}