2016-04-04 47 views

回答

3

你可以使用的東西沿着 if (abs(result - expected) < 0.00001)

線或相對的,而非絕對的,錯誤:

float relativeError = abs((A - B)/B); 
    if (relativeError <= maxRelativeError) 

有關詳細信息,請參閱本。 http://www.cygnus-software.com/papers/comparingfloats/comparingfloats.htm

+0

但要小心。如果B是零,那麼「相對誤差」計算就會爆炸。一般來說,如果你使用相對誤差,零將只將「幾乎相等」與一個恰好爲零的值進行比較。 –

-2
bool AreSame(double a, double b) 
{ 
    return fabs(a - b) < std::numeric_limits<double>::min(); 
} 
+2

這是不一樣的。拿數字「1e-40」和「2e-40」來說,這些數字可以完美表示爲雙打,但會與你的方法相當。 – Lanting