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++ 4

    Danke 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.


Anmelden zum Antworten