0.999999999迴圈 無論迴圈多少位,始終不到1,也就是說 小於1。
如果你寫程式:
double x= 0.99999999999999999999999999999999;
if (x>1.0) printf("x>1\n");
else if (x
else printf("x==1\n");
你會得到 x==1
原因出在計算機用2進製表示10進位制小數時有截斷誤差EPS.
正確寫法 用float.h 裡定義的截斷誤差 DBL_EPSILON:
#include
// #include
main()
{
if (x-1.0 > DBL_EPSILON ) printf("x>1\n");
else if (x-1.0
return 0;
}
得到 x
0.999999999迴圈 無論迴圈多少位,始終不到1,也就是說 小於1。
如果你寫程式:
double x= 0.99999999999999999999999999999999;
if (x>1.0) printf("x>1\n");
else if (x
else printf("x==1\n");
你會得到 x==1
原因出在計算機用2進製表示10進位制小數時有截斷誤差EPS.
正確寫法 用float.h 裡定義的截斷誤差 DBL_EPSILON:
#include
#include
// #include
main()
{
double x= 0.99999999999999999999999999999999;
if (x-1.0 > DBL_EPSILON ) printf("x>1\n");
else if (x-1.0
else printf("x==1\n");
return 0;
}
得到 x