Mathematik in Java - genau?

Status
Nicht offen für weitere Antworten.

Develin

Mitglied
Hi!

Mal wieder so ein Fehler den ich mir nicht erklären kann:

Im Programm wird ein bisserl was ausgerechnet und das Ergebnis hat mich doch etwas gewundert berechnet wird

1-(8 + 0)/10 was laut meinem Programm 0.19999998807907104
(wenn ich mit floats rechne und einen ähnlichen Wert wenn ich mit doubles rechne)

Jetzt ist schon klar das irgendwo gerundet wird, aber doch nicht bei diesen Werten!

Nun da es ohnehin Prozentwerte sind, werde ich wohl vorläufig mit int rechnen, aber könnt ihr mir sagen warum java
1 - 0,8 so falsch ausrechnet (bis zu diesem punkt stimmt die Berechnung nämlich noch)? Das kann doch kein gewünschtes Verhalten sein?!?
 
B

Beni

Gast
Ein Computer rechnet nicht im Dezimalsystem, sondern im Binärsystem. Und dort ist die Darstellung solch "trivialer" Zahlen halt manchmal etwas komplizierter, und es kommt zu Fehlern.

Im übrigen wirst du mit jeder anderen Programmiersprache dasselbe Resultat erhalten, da dies ein "Problem" der Hardware, nicht der Software, ist.
 

0xdeadbeef

Top Contributor
Es gibt die Klasse BigDecimal, die zumindest Dezimalbrüche mit beliebiger Genauigkeit darstellen kann. Bereits bei rationalen Zahlen mit unendlicher Periode (1/3) treten aber auch hier Ungenauigkeiten auf.
Prinzipiell könnte man sich auf der Basis von Bigdecimal eine Klasse schreiben, die mit rationalen Zahlen in Bruchdarstellung beliebig genau rechnen kann, zumindest was die Grundrechenarten angeht.

Nebenbei: das Ergebnis der double-Berechnung ist "0.19999999999999996", was aber schon verdammt nah an 0.2 ist ;)
 
G

Gast

Gast
Ich möcht ja nicht häresie üben aber das ist und bleibt eine katastrophe:

1) Ob binär oder dezimal ist egal - egal in welchen system ich rechne (kannst auch hex nehmen oder etwas anderes) für die Genauigkeit ist das egal - denn im hintergrund findet eine exakte Umsetzung statt

2)Selbst php berechnet das genau - siehe http://sfta.sourceforge.net/test.php (von C und konsorten ganz zu schweigen) - wie gesagt es ist ja nur 1 - 0,8 also viel einfacher geht es kaum für dezimalzahlen und wo ist da genauigkeit auf 15 Stellen die die Java doku verspricht....

3) du nennst 0.19999999999999996 genau bei einer so einfachen rechnung wie 1 - 0.8? stell dir mal ein Bankensystem vor das millionenbeträge falsch verechnet (zum beispiel bei zinsen etc) ohne das ein Programmierfehler vorliegt.......

mann oh mann..... das kann ja nicht wahr sein....
 
G

Guest

Gast
Nur in Java ist der Umgang mit Fliesskommazahlen dermassen "krank"
Wenn ich allein schon die Beschreibung der Rundungsstrategien lese,
wird mir schlecht. :roll:
ROUND_HALF_EVEN

Rounding mode to round towards the "nearest neighbor" unless both neighbors are equidistant, in which case, round towards the even neighbor. Behaves as for ROUND_HALF_UP if the digit to the left of the discarded fraction is odd; behaves as for ROUND_HALF_DOWN if it's even. Note that this is the rounding mode that minimizes cumulative error when applied repeatedly over a sequence of calculations.

Da werden Fälle/Funktionalitäten implementiert, die vielleicht 2% aller Anwendungen
benötigen. Die einfachste käufmännische Rundung, muss aber "von Hand" erledigt werden.
 

0xdeadbeef

Top Contributor
Ich denke, das "Problem" mit Java ist einfach, daß man sich hier möglichst weit von Abhängigkeiten lösen will, die man in anderen Sprachen hat. Ein C-Compiler benutzt offensichtlich in seinen Mathe-Funktionen bzw. -Libraries geschickte Rundungstechniken, um bei einfachen Berechnungen die Schwächen der Fließkommaformate zu übertünchen. In Java muß man sich selber entscheiden, wie man rundet, hat aber dann den Vorteil, daß das Verhalten reproduzierbar ist. Für ernsthafte mathemathische Algorithmen ist das u.U. sogar vor Vorteil. Für "Normaluser" wäre es aber in der Tat wünschenswert gewesen, eine einfachere Lösung zu finden, die im Alltagseinsatz "geschickter" rundet.
 

EagleEye

Bekanntes Mitglied
ich glaube ihr irrt euch da bischen das hat nix mit der sprache zu tun diese fehler treten einfach auf weil man mit fließkommen zahlen nur einen bestimmten bereich abdecken kann
und das ist in allen sprachen gleich (oder fast gleich) da ist java sogar noch besser weil das für int einen festen wert hat weil bei c/c++ isn int auf jedem system anders groß

wenn ihr genauere größen haben wollt müßt ihr mit bigdezimal/biginteger rechnen oder ne eigene klasse schreiben

das beste beispiel ist wurzel 3 das kann man nicht darstellen da wird dann irgendwann abgeschnitten
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
D Mathematik in der Informatik Java Basics - Anfänger-Themen 6
F Variablen Mathematik - Vektorielle Geschwindigkeit Java Basics - Anfänger-Themen 19
H .java Dateien in Eclipse einbinden und ausführen Java Basics - Anfänger-Themen 1
onlyxlia Schlüsselworte Was meint man mit "einen Typ" in Java erstellen? Java Basics - Anfänger-Themen 2
O Java Kara geschweifte Klammern Java Basics - Anfänger-Themen 2
richis-fragen Mausrad logitech kann links und rechts klick wie in java abragen. Java Basics - Anfänger-Themen 15
XWing Java Klssenproblem Java Basics - Anfänger-Themen 4
R Umgebungsvariable java -cp gibt immer Java-Hilfe... Java Basics - Anfänger-Themen 3
farbenlos Csv Datei in Java einlesen Java Basics - Anfänger-Themen 18
F TableModelListener: java.lang.ArrayIndexOutOfBoundsException: 132 Java Basics - Anfänger-Themen 3
G Java 8 - Support-Ende Java Basics - Anfänger-Themen 7
T Java Weihnachtsbaum + Rahmen Java Basics - Anfänger-Themen 1
N Will mit Java anfangen Java Basics - Anfänger-Themen 13
Ü Java Array - Buchstaben als Zahlen ausgeben Java Basics - Anfänger-Themen 22
M Java Iterator Verständnisfrage Java Basics - Anfänger-Themen 6
M Java Mail Programm Java Basics - Anfänger-Themen 4
Sniper1000 Java 391 für Windows Java Basics - Anfänger-Themen 37
J Java long- in int-Variable umwandeln Java Basics - Anfänger-Themen 6
JaZuDemNo Java im Studium Java Basics - Anfänger-Themen 7
E Java Programm zur anzeige, ob Winter- oder Sommerzeit herrscht Java Basics - Anfänger-Themen 62
I QR code in Java selber generieren Java Basics - Anfänger-Themen 5
V Java-Ausnahmebehandlung: Behandlung geprüfter Ausnahmen Java Basics - Anfänger-Themen 1
krgewb Java Streams Java Basics - Anfänger-Themen 10
A Überwältigt von der komplexen Java Welt Java Basics - Anfänger-Themen 29
O Mehrfachvererbung auf Spezifikations- und Implementierungsebene in Java. Interfaces Java Basics - Anfänger-Themen 19
John_Sace Homogene Realisierung von Generics in Java ? Java Basics - Anfänger-Themen 19
P Meldung aus Java-Klasse in Thread an aufrufende Klasse Java Basics - Anfänger-Themen 1
R mit Java API arbeiten Java Basics - Anfänger-Themen 9
P JDK installieren Probleme bei der Java-Installation Java Basics - Anfänger-Themen 8
S Java: Wie sortiere ich eine ArrayList benutzerdefinierter Objekte nach einem bestimmten Attribut? Java Basics - Anfänger-Themen 2
Timo12345 JNLP File mit Java öffnen Java Basics - Anfänger-Themen 2
S Video Editierung mit Java.._ Java Basics - Anfänger-Themen 2
F Einstelungen in Java - CursorBlinkRate Java Basics - Anfänger-Themen 10
A PHP $_POST["name"] in Java Java Basics - Anfänger-Themen 3
vivansai21 Is there a oneliner to create a SortedSet filled with one or multiple elements in Java? Java Basics - Anfänger-Themen 9
Athro-Hiro Weißes Bild in Java erstellen Java Basics - Anfänger-Themen 3
Arjunreddy Can someone please tell me how to use a debugger in BlueJ(a Java environment) Java Basics - Anfänger-Themen 1
M Java assoziationen (UML) Java Basics - Anfänger-Themen 8
H Excel-Tabellen mit Java erstellen Java Basics - Anfänger-Themen 4
Simon16 Java ArrayListe von einer Klasse sortieren Java Basics - Anfänger-Themen 2
P Wie kann ich in meinem Java Programm etwas dauerhaft speichern? Java Basics - Anfänger-Themen 5
H Nutzt Eclipse alle CPU-Threads beim Ausführen von Java-Programmen? Java Basics - Anfänger-Themen 4
xXGrowGuruXx Java einstieg, leichte sache 0 verstanden Java Basics - Anfänger-Themen 7
A java.sql.SQLException: Data type mismatch. Java Basics - Anfänger-Themen 1
H Java-Programm zur Ausgabe von Zuständen Java Basics - Anfänger-Themen 80
N Java Spiel Figur auf dem Hintergrundbild bewegen. Java Basics - Anfänger-Themen 11
G Kann Java-Programm nicht als jar aufrufen, auch als EXE nicht Java Basics - Anfänger-Themen 19
N Java Taschenrechner hat Jemand vlt einen Tipp dafür wie ich jetzt die buttons verbinden kann und das Ergebnis auf dem textfield anzeigen lassen kann Java Basics - Anfänger-Themen 13
A Lerngruppe Java Java Basics - Anfänger-Themen 2
G Help me in the Java Program Java Basics - Anfänger-Themen 2
L Java- Vererbung Java Basics - Anfänger-Themen 4
LimDul Suche Java Stream Tutorial Java Basics - Anfänger-Themen 2
_so_far_away_ Ich möchte Java lernen Java Basics - Anfänger-Themen 11
benny1993 Java Programm erstellen für ein Fußball-Turnier Java Basics - Anfänger-Themen 3
M Datentypen While-Schleife eine Java Methode erstellen Java Basics - Anfänger-Themen 3
V Bild per Java Script austauschen Java Basics - Anfänger-Themen 7
MoxMorris this Keyword in Java Java Basics - Anfänger-Themen 14
D Wie kann man in Java nach Arrays auf Duplikate prüfen Java Basics - Anfänger-Themen 12
wolei JAVA Zeitdifferenz feststellen. Java Basics - Anfänger-Themen 4
DiyarcanZeren Rekursion in Java Java Basics - Anfänger-Themen 5
wolei Java generic interface in a generic class Java Basics - Anfänger-Themen 6
monsterherz Ablauf der Erstellung eines Java Programmes Java Basics - Anfänger-Themen 17
monsterherz Circle.java:5: error: <identifier> expected Java Basics - Anfänger-Themen 2
julian-fr Wie kann ich am besten Java lernen? Java Basics - Anfänger-Themen 17
A Java-Properties und -RessourceBundles Java Basics - Anfänger-Themen 5
lrnz22 Java-Basics-Aufgabe Java Basics - Anfänger-Themen 8
R Java kann nicht installiert werden Java Basics - Anfänger-Themen 8
marcelnedza Finde meinen Fehler in einer Methode nicht, Java Karol Java Basics - Anfänger-Themen 15
G In ein java Dokument Ton einbinden Java Basics - Anfänger-Themen 1
C was heisst es wenn java ']' erwartet ? Java Basics - Anfänger-Themen 2
KeinJavaFreak Erste Schritte Programm "Java(TM) Platform SE binary " nicht vorhanden Java Basics - Anfänger-Themen 1
KeinJavaFreak Erste Schritte Java "Executable Jar File" nicht vorhanden Java Basics - Anfänger-Themen 1
melisax Java 2D-Array Tabelle Java Basics - Anfänger-Themen 4
melisax Java Array Wert an bestimmtem Index angeben Java Basics - Anfänger-Themen 14
J Java Testklasse Java Basics - Anfänger-Themen 5
P Java Selenium . Parameterized.Parameters erzeugt eine Fehlermeldung Java Basics - Anfänger-Themen 14
W Java-Code mit Array Java Basics - Anfänger-Themen 14
W Java-Code Java Basics - Anfänger-Themen 2
P BeforeEach AfterEach werden nicht ausgeführt. Java / Selenium Java Basics - Anfänger-Themen 4
A Wie führe ich eine Batch-Datei von meiner Java-Anwendung aus? Java Basics - Anfänger-Themen 18
W Java code- TicTac toe Java Basics - Anfänger-Themen 51
Ostkreuz Java Docs Java Basics - Anfänger-Themen 9
R Java boolean Unterschied " == " und " = " Java Basics - Anfänger-Themen 3
D Java Programm mit Batch-Datei starten Java Basics - Anfänger-Themen 32
W Java-code Java Basics - Anfänger-Themen 8
W Java-code Java Basics - Anfänger-Themen 9
W Java-Code erklären Java Basics - Anfänger-Themen 6
A Java Kurs / Tutorial Java Basics - Anfänger-Themen 6
K Java Lotto Spiel; ich komme nicht weiter Java Basics - Anfänger-Themen 15
R Operatoren Rechenoperation in Java verwenden für Calculator Java Basics - Anfänger-Themen 2
P Java 2n Potenzieren Java Basics - Anfänger-Themen 1
J Java Hamster Java Basics - Anfänger-Themen 4
D Wie sehe ich ein Java-Programm? Java Basics - Anfänger-Themen 27
V Die Funktion des neuen Schlüsselworts in Java Java Basics - Anfänger-Themen 1
W Junit-Test (Java) Java Basics - Anfänger-Themen 4
W Testfälle bei Java ( Junit-Test) Java Basics - Anfänger-Themen 3
laxla123 If-else Java Java Basics - Anfänger-Themen 4
RashAGhul Java Verwaltungstool Erstellen mit kaum Wissen Java Basics - Anfänger-Themen 9
S Substring in java Java Basics - Anfänger-Themen 3
Z Operatoren Java Applikation Java Basics - Anfänger-Themen 8

Ähnliche Java Themen

Neue Themen


Oben