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