Heim >Java >javaLernprogramm >Wie vermeide ich Gleitkomma-Präzisionsfehler in Java?

Wie vermeide ich Gleitkomma-Präzisionsfehler in Java?

Susan Sarandon
Susan SarandonOriginal
2024-11-17 19:16:01259Durchsuche

How to Avoid Floating-Point Precision Errors in Java?

Vermeiden von Gleitkomma-Präzisionsfehlern mit Floats und Doubles in Java

In Java Operationen mit Gleitkommazahlen (Floats und Doubles) kann zu Präzisionsfehlern führen. Diese Fehler entstehen, weil Floats und Doubles Zahlen in binärer Form darstellen, die nicht für alle Dezimalwerte exakte Darstellungen liefert.

Bedenken Sie den folgenden Code:

for (float value = 0.0f; value < 1.0f; value += 0.1f)
    System.out.println(value);

Anstelle der erwarteten Werte Die Ausgabe zeigt Inkremente von 0,1 mit einer leichten Anhäufung von Fehlern an:

0.0
0.1
0.2
0.3
0.4
0.5
0.6
0.70000005
0.8000001
0.9000001

Behebung der Präzisionsfehler

Um dieses Problem zu vermeiden, ziehen Sie die folgenden Ansätze in Betracht:

  • Verwenden Sie Toleranz bei Vergleichen: Wenn Sie Floats oder Doubles auf Gleichheit vergleichen, lassen Sie in beiden Fällen eine kleine Toleranz zu, um mögliche Präzisionsfehler zu berücksichtigen.
  • Verwenden Sie BigDecimal: Alternativ können Sie die BigDecimal-Klasse verwenden, die exakte Dezimaldarstellungen von Zahlen bereitstellt. Hier ist ein Beispiel:
BigDecimal step = new BigDecimal("0.1");
for (BigDecimal value = BigDecimal.ZERO;
     value.compareTo(BigDecimal.ONE) < 0;
     value = value.add(step)) {
    System.out.println(value);
}

Dieser Code stellt den Wert genau dar und erhöht ihn um 0,1, wodurch die Anhäufung von Präzisionsfehlern vermieden wird.

Das obige ist der detaillierte Inhalt vonWie vermeide ich Gleitkomma-Präzisionsfehler in Java?. 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