Heim >Java >javaLernprogramm >Wie kann ich doppelte Werte in Java sicher vergleichen, um Präzisionsfehler zu vermeiden?

Wie kann ich doppelte Werte in Java sicher vergleichen, um Präzisionsfehler zu vermeiden?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-12-30 19:52:10676Durchsuche

How Can I Safely Compare Double Values in Java to Avoid Precision Errors?

Das Präzisionsrisiko des Doppelvergleichs in Java und seine Lösung

Der Vergleich doppelter Werte in Java kann eine trügerische Aufgabe sein. Ein naiver Vergleich, wie unten dargestellt, kann aufgrund von Einschränkungen der Gleitkommagenauigkeit zu unerwarteten Ergebnissen führen:

double a = 1.000001;
double b = 0.000001;

if ((a-b) == 1.0) {
  // This condition evaluates to false, though it seemingly should be true.
}

Das Problem entsteht, weil die Subtraktion a-b nicht genau 1,0, sondern einen Wert sehr nahe daran zurückgibt. Gleitkomma-Arithmetik kann zu Rundungsfehlern führen, was zu einem Wert von 0,9999999999999999 führt, was ungleich 1,0 ist.

Um diese Gefahr zu vermeiden, wird empfohlen, einen ungefähren Vergleich anstelle eines genauen Vergleichs zu verwenden. Mit der Methode Math.abs() kann die absolute Differenz zwischen dem tatsächlichen Ergebnis und dem erwarteten Wert berechnet und diese Differenz mit einem kleinen Toleranzwert verglichen werden:

double c = a-b;
if (Math.abs(c-1.0) <= 0.000001) {
  // This condition evaluates to true, as the absolute difference is small enough.
}

Durch Festlegen einer geeigneten Toleranz Mit diesem Wert können Sie den für den Vergleich akzeptablen Genauigkeitsgrad steuern. Dieser Ansatz ermöglicht es Ihnen, Gleitkomma-Präzisionsbeschränkungen effektiv zu handhaben und genaue Auswertungen sicherzustellen.

Das obige ist der detaillierte Inhalt vonWie kann ich doppelte Werte in Java sicher vergleichen, um Präzisionsfehler zu vermeiden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn