Hallo,
ich bin noch ziemlich neu hier und in der JAVA-Welt noch ein Anfänger. Derzeit beschäftige ich mich mit den Grundlagen. Für einen Profi* bzw. Fortgeschrittene(n) wird meine nachfolgende Frage sicher einfach zu beantworten sein:
Warum ist der Wert der Variablen z bei den nachfolgenden Codezeilen nicht 1.2, sondern 1.2000000000000002:
double z = 1.0;
z = z + 0.1;
z = z + 0.1;
System.out.println("z = " + z);
Was ich nicht verstehe:
z ist im Zahlenbereich DOUBLE ja eine Gleitkommazahl, die schon die höchste Präzision hat. Ich addiere auch eine/zwei Zahlen hinzu, die aus dem Bereich einer Gleitkommazahl kommen (also nicht etwa ohne Punkt oder eine "Ganzzahl"). Warum ist es dann nach der Addition nicht 1.2, sondern eben die Zahl mit der winzigen Abweichung von oben? Einen Überlauf des Zahlenbereiches sehe ich hier irgendwie nicht, oder täusche ich mich da? Wer kann mir kurz erklären, warum das auftritt bzw. wer kann mir einen Link schicken, wo ich das nachlesen kann? Wie kann ich dann sicher stellen, dass tatsächlich 1 + 0.1 + 0.1 = 1.2 ist? Meiner Meinung nach reicht es ja nicht, einfach die letzten Ziffern zu ignorieren bzw. abzuschneiden oder zu runden. Sonst würde, falls ich mit der Stellenanzahl rechnen wollte, dann tatsächlich echte Fehler in der Genauigkeit entstehen - denke ich.
Vielen Dank.
Rene
ich bin noch ziemlich neu hier und in der JAVA-Welt noch ein Anfänger. Derzeit beschäftige ich mich mit den Grundlagen. Für einen Profi* bzw. Fortgeschrittene(n) wird meine nachfolgende Frage sicher einfach zu beantworten sein:
Warum ist der Wert der Variablen z bei den nachfolgenden Codezeilen nicht 1.2, sondern 1.2000000000000002:
double z = 1.0;
z = z + 0.1;
z = z + 0.1;
System.out.println("z = " + z);
Was ich nicht verstehe:
z ist im Zahlenbereich DOUBLE ja eine Gleitkommazahl, die schon die höchste Präzision hat. Ich addiere auch eine/zwei Zahlen hinzu, die aus dem Bereich einer Gleitkommazahl kommen (also nicht etwa ohne Punkt oder eine "Ganzzahl"). Warum ist es dann nach der Addition nicht 1.2, sondern eben die Zahl mit der winzigen Abweichung von oben? Einen Überlauf des Zahlenbereiches sehe ich hier irgendwie nicht, oder täusche ich mich da? Wer kann mir kurz erklären, warum das auftritt bzw. wer kann mir einen Link schicken, wo ich das nachlesen kann? Wie kann ich dann sicher stellen, dass tatsächlich 1 + 0.1 + 0.1 = 1.2 ist? Meiner Meinung nach reicht es ja nicht, einfach die letzten Ziffern zu ignorieren bzw. abzuschneiden oder zu runden. Sonst würde, falls ich mit der Stellenanzahl rechnen wollte, dann tatsächlich echte Fehler in der Genauigkeit entstehen - denke ich.
Vielen Dank.
Rene