2016-04-04 13 views

Antwort

3

Sie könnten etwas entlang der Linien von if (abs(result - expected) < 0.00001)

oder für einen Verwandten, und nicht absolut, Fehler verwenden:

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

diese Details für mehr sehen. http://www.cygnus-software.com/papers/comparingfloats/comparingfloats.htm

+0

Aber Vorsicht. Diese "Relativfehler" -Berechnung explodiert, wenn B Null ist. Wenn Sie relative Fehler verwenden, vergleicht Null im Allgemeinen nur "fast gleich" mit einem Wert, der genau Null ist. –

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

Dies ist nicht das Gleiche. Nehmen Sie zum Beispiel die Zahlen '1e-40' und' 2e-40', diese sind perfekt als Doppel darstellbar, aber vergleichen Sie gleich mit Ihrer Methode. – Lanting

Verwandte Themen