1.程序代码
include <stdio.h>
#define EXP 0.0000000001
int main()
{
double i = 20.0;
double j = i / 7.0;
if (((j*7-i) > -EXP) &&((j*7-i) < EXP))
{
printf("equal\n");
}
else
{
printf("not equal\n");
}
return 0;
}
2.执行结果
3.程序分析
因为浮点数在内存中的存储方式使得有些浮点数无法精确保存,这样就必定有精度的损失,一旦丢失数据就不够准确,所以不能用==对浮点数进行比较,要设置一个能接受的精度,保证误差在精度范围内就可以
((j*7-i) > -EXP) &&((j*7-i) < EXP) 使得j*7-i无限接近0,就约等于0