Rundungsfehler bei setprecision
-
Hallöchen,
ich bin relativ neu bei C++ und mir ist ein seltsamer Rundungsfehler aufgefallen. Vielleicht kann mir ja jemand sagen, ob evtl. der Fehler bei mir liegt.
Der folgende Code
int main () { long double x=9.595e-3; long double y=4.995e-3; cout << setprecision(2) << scientific; cout << "x=" << x << endl; cout << "y=" << y; cin.get(); return 0; }liefert die Ausgabe:
x=9.59e-003
y=5.00e-003x ist falsch gerundet, während y richtig gerundet ist. Ich habe mal ein bisschen rumgespielt, aber kein System gefunden, wann richtig und wann falsch gerundet wird. Woran liegt das?
(ich benutze die wx-DevC++ Entwicklungsumgebung zusammen mit dem mitgelieferten Compiler - ich glaube das ist der Gnu-Compiler)
Danke schon mal für alle Hinweise.
Andi
-
Was du als Literal "9.595e-3" eintippst wird in eine binäre Darstellung verwandelt, die endlich ist und daher evtl. nicht genau diesen Wert annehmen kann, also z.B. etwas wie 0.009594999997. Bei der Ausgabe wird dann abgerundet und es kommt 0.00959 raus.
Genauso wäre es, wenn du (0.1)3 (also ein drittel) im Zehnersystem mit endlich vielen Stellen speicherst, 0.333333 ist auch nicht wirklich ein drittel - bei der Ausgabe im Dreiersystem käme dann auch wieder was anderes raus.
-
Alles klar. Danke!