Doppelte Werte in Java effektiv vergleichen
In Java kann der Vergleich zweier doppelter Werte mit dem Gleichheitsoperator (==) zu unerwarteten Ergebnissen führen aufgrund der inhärenten Genauigkeitsbeschränkungen der Gleitkomma-Arithmetik. Um dies zu überwinden, ist es wichtig, alternative Ansätze für den effektiven Vergleich doppelter Werte zu übernehmen.
Betrachten Sie das folgende Beispiel:
double a = 1.000001; double b = 0.000001; boolean result = (a - b) == 1.0;
Überraschenderweise ergibt dieser Vergleich falsch, obwohl dies intuitiv so sein sollte WAHR. Dies liegt daran, dass die Subtraktionsoperation (a – b) 0,9999999999999999 ergibt, was etwas weniger als 1,0 ist.
Um dieses Problem anzugehen, besteht ein robusterer Ansatz darin, eine Fehlermarge oder Delta zu verwenden, innerhalb derer Die Werte können als gleich angesehen werden. Eine Möglichkeit, dies zu implementieren, ist die Verwendung von Math.abs():
double a = 1.000001; double b = 0.000001; double delta = 0.000001; boolean result = Math.abs(a - b - 1.0) <= delta;
Wenn in diesem Fall die absolute Differenz zwischen (a – b) und 1,0 kleiner oder gleich dem vordefinierten Delta von 0,000001 ist, Der Vergleich wird als wahr ausgewertet. Dieser Ansatz ermöglicht genauere Vergleiche und berücksichtigt gleichzeitig potenzielle Präzisionsfehler.
Das obige ist der detaillierte Inhalt vonWie kann ich Doppelwerte in Java genau vergleichen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!