Heim >Java >javaLernprogramm >Wie kann ich doppelte Werte in Java sicher vergleichen, um Präzisionsfehler zu vermeiden?
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!