2016-04-04 33 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