DBL_EPSILON和 FLT_EPSILON主要用於單精度和雙精度的比較當中:
A、
double a = 0.5;
if (a == 0.5) //正確
x++;
B、
double b = sin(M_PI / 6.0);
if (b == 0.5) //不一定就正確
x++;
A、就正確
B、就不一定正確,b==0.5的結果取決於處理器、編譯器的版本和設置。比如 Visual C++ 2010 編譯器編譯後運行b的值爲0.49999999999999994
我的一種改進:
double b = sin(M_PI / 6.0);
if (fabs(b - 0.5) < DBL_EPSILON)
x++;
或者:
double b = sin(M_PI / 6.0);
x+= (fabs(b - 0.5) < DBL_EPSILON)?0:1;