Heim > Java > javaLernprogramm > Hauptteil

Wie vermeide ich Gleitkomma-Präzisionsfehler in Java?

Susan Sarandon
Freigeben: 2024-11-17 19:16:01
Original
132 Leute haben es durchsucht

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);
Nach dem Login kopieren

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
Nach dem Login kopieren

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);
}
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage