由于浮点数的存储方式和精度问题,判断两个浮点数是否相等,不应该使用简单的等号(==)来判断浮点数是否相等。
目前我只掌握一种方法:判断两个浮点数差的绝对值小宇某个特定值就说明这两个浮点数相等。
#include <stdio.h>
#include <math.h>
int main() {
double a = 1.2345678911;
double b = 1.2345678912;
double eps = 1e-9; // 定义误差范围,科学计数法
if (fabs(a - b) < eps) {
printf("ab相等\n");
} else {
printf("ab不相等\n");
}
return 0;
}
解释这里使用abs和fabs的区别:
abs()的参数必须是整数类型,如果传入的是浮点数类型,则会被自动转换为整数类型,且会截断小数部分,导致结果不正确。
fabs()的参数必须是浮点数类型,如果传入的是整数类型,则会被自动转换为浮点数类型,且会添加小数部分,导致结果不正确。