C
Chris2103
Gast
Hallo,
ich habe folgendes Problem: Wenn ich die Zahl 0.1 in einem double speichere, wird diese Zahl im IEEE 754 Format gespreichert, d.h. es wird gerundet. Wenn ich die Zahl ausgebe erwarte ich also ein Zahl != 0.1.
Mit dem Code:
wird allerdings folgendes ausgegeben:
double: 0,10000000000000000000
Zuerst dachte ich, dass sich 0.1 vielleicht zufälligerweise genau darstellen lässt, aber das selbe Programm in C++ ergibt dann folgende Ausgabe:
double: 0.10000000000000000555
Da bei Java und C++ der double Type angeblich auf dem IEEE 754 Standard basiert (auch beide 64 Bit), ist nun die Frage, wo der Fehler liegt??? Rundet printf obwohl ich 20 Nachkommastellen Genauigkeit wollte? Kann ich den "echten" double Wert in Java irgendwie ausgeben?
Gruß, Chris
ich habe folgendes Problem: Wenn ich die Zahl 0.1 in einem double speichere, wird diese Zahl im IEEE 754 Format gespreichert, d.h. es wird gerundet. Wenn ich die Zahl ausgebe erwarte ich also ein Zahl != 0.1.
Mit dem Code:
Code:
public class Main
{
public static void main(String[] args)
{
double d = 0.1;
System.out.printf("double: %.20f%n", d);
}
}
double: 0,10000000000000000000
Zuerst dachte ich, dass sich 0.1 vielleicht zufälligerweise genau darstellen lässt, aber das selbe Programm in C++ ergibt dann folgende Ausgabe:
double: 0.10000000000000000555
Da bei Java und C++ der double Type angeblich auf dem IEEE 754 Standard basiert (auch beide 64 Bit), ist nun die Frage, wo der Fehler liegt??? Rundet printf obwohl ich 20 Nachkommastellen Genauigkeit wollte? Kann ich den "echten" double Wert in Java irgendwie ausgeben?
Gruß, Chris