Dezimalstellenmanipulation im Doppel: Rundungsfehler beheben
Präzision ist ein entscheidender Aspekt numerischer Operationen, insbesondere beim Umgang mit Gleitkommadaten Typen wie double. Beim Versuch, Dezimalstellen durch Multiplikation oder Division zu verschieben, stößt man auf das Problem von Rundungsfehlern. In diesem Artikel werden die Nuancen des Verschiebens von Dezimalstellen bei Dubletten untersucht und Techniken zum Verringern von Rundungsfehlern untersucht.
Problem: Verschieben von Dezimalstellen mithilfe von Multiplikation
Betrachten Sie das Szenario, in dem 1234 steht in einem Double gespeichert und das Ziel besteht darin, die Dezimalstelle zu verschieben, um 12,34 zu erhalten. Das zweimalige Multiplizieren von 1234 mit 0,1, wie im folgenden Codeausschnitt dargestellt, führt nicht genau zum gewünschten Ergebnis von 12,34.
double x = 1234; for(int i=1;iUrsache: Ungenauigkeiten in der Gleitkommadarstellung
Das zugrunde liegende Problem ist, dass 0,1 nicht genau im Doppel dargestellt werden kann. Wenn Sie die Multiplikation zweimal durchführen, verstärkt sich dieser Fehler, was zu einer geringfügigen Abweichung des Endwerts führt.
Lösung: Division durch Zehnerpotenzen
Um Summierungsfehler zu vermeiden, sollten Sie eine Division in Betracht ziehen x stattdessen um 100. Da 100 genau in double dargestellt werden kann, liefert dieser Ansatz das richtige Ergebnis:
double x = 1234; x /= 100; System.out.println(x); // Prints: 12.34BigDecimal: Umgang mit präziser Arithmetik
Für Szenarien, die absolute Präzision erfordern, sollten Sie die Verwendung von BigDecimal in Betracht ziehen. Im Gegensatz zu Double oder Float kann BigDecimal Dezimalarithmetik ohne Rundungsfehler verarbeiten. Im Vergleich zu primitiven numerischen Typen kann es jedoch zu Leistungseinbußen kommen.
Rundungsfehler: Verstehen und Abmildern
Rundungsfehler sind bei Gleitkommaberechnungen inhärent. Die doppelte Genauigkeit ermöglicht 15 bis 16 signifikante Stellen, was bedeutet, dass sich bei mehreren Vorgängen kleine Rundungsfehler ansammeln können. Die Division durch Zehnerpotenzen hilft, wie oben gezeigt, diese Fehler zu mildern, ist aber nicht für alle Szenarien unfehlbar.
Hinweis zu Division und Multiplikation
Es ist wichtig Bitte beachten Sie, dass x / 100 und x * 0,01 aufgrund von Rundungsfehlern nicht austauschbar sind. Die Division hängt vom Wert von x ab, während 0,01 einen festen Rundungsfehler hat.
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3