Kommazahlen
-
Wie kommt es, dass wenn ich
double z1 = 1.33; z1 *= 1.33; cout << z1 << endl;
schreibe ein falsches Ergebnis (1.7689) ausgegeben wird. Sogar mit long double???
-
1.33*1.33 gibt nunmal 1.7689, da ist nichts zu machen.
-
Ah sorry ich hab einen 3er vergessen:
double z1 = 1.333; z1 *= 1.333; cout << z1 << endl;
Hier wird 1.77689 geliefert, richtig wäre aber 1,776889 !
-
Das fällt dann unter Rundungsfehler.
-
Ja aber wie verhindert man so etwas.
Übrigens: in Java gibt es hier keinen Fehler.
-
Rundung ist schon der richtige Begriff, die findet nämlich bei der Ausgabe statt.
Mach es so:cout << fixed << z1 << endl;
-
Achso danke
-
Naja, Rundung findet praktisch überall statt ... sowohl beim rechnen mit floats ... als auch bei der konvertierung zwischen float <-> string (für ein/ausgabe).
Per default zeigt cout einem halt nur 6 signifikante Dezimalstellen an (oder so ähnlich). Das kann man mit precision ändern.
-
Aber was macht man wenn man nicht weiß wie viele Nachkommastellen die Zahl hat?
-
So genau ausgeben, wie mans braucht?