DBL_EPSILON和 FLT_EPSILON的用法




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;



發佈了102 篇原創文章 · 獲贊 50 · 訪問量 26萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章