Gleiche Genauigkeit von float, double und long double ?!
-
Hi,
Ich habe 3 Variablen jeweils mit float, double und long double deklariert, definiert und ausgegeben, etwa so:float a = 1.23456789; double b = 1.23456789; long double c = 1.23456789; cout << "a: " << a << endl << "b: " << b << endl << "c: " << c << endl;
Jedoch werden bei allen Variablen 6 Stellen angezeigt, also 1.23457!
Warum ?
Compiler: Devc++ 4Danke und Tschö
// Bei mir funktionieren die Tags irgendwie nicht über die Buttons o_0
-
Auf jeden Fall ist dein R-Value (1.23456789) mal kein float-Wert, sondern ein double-Wert.
Für float-Werte schreibst du hinter der Zahl ein kleines f. Bei long double weiß ich es nicht.Die Ungenauigkeit hängt vielleicht auch einfach mit dem '<<' zusammen, keine Ahnung, wie der die Werte konvertiert um sie auszugeben. Ist aber jetzt nur ne vage Theorie.
-
Optimizer schrieb:
Auf jeden Fall ist dein R-Value (1.23456789) mal kein float-Wert, sondern ein double-Wert.
Für float-Werte schreibst du hinter der Zahl ein kleines f. Bei long double weiß ich es nicht.Die Ungenauigkeit hängt vielleicht auch einfach mit dem '<<' zusammen, keine Ahnung, wie der die Werte konvertiert um sie auszugeben. Ist aber jetzt nur ne vage Theorie.
*klickmach*
cout.precision(10)
So, jetzt gibt er
float(a): 1.234567881 double(b): 1.23456789 long double(c): 1.23456789
Ich versteh den Wert von a nicht so richtig, wie wurde das denn gerundet?
-
Das hängt vielleicht eher mit der internen Darstellung der Zahl zusammen. Wenn du bei signed ints beim max-wert noch 1 dazu zählst, kommt auch der größte negative Wert raus.
Da kann man auch nicht von Runden sprechen.