Nachkommastellen



  • 1. Ein Double kann ca. 14 Stellen richtig speichern, ich nehme mal an, dass du nicht 10 Stellen vor dem Komma hast?
    2. Steht dann da 3.452900000000000 oder nur 3.4529, dann wäre nämlich ein Problem der Formatierung deiner Ausgabe?



  • #include <iostream>
    #include <cstdio>
    int main()
    {
        double quadratwurzel = sqrt(10.0);
        //C-Style
        printf("%.15f\n", quadratwurzel);
        //C++-Style
        cout.precision(15);
        cout << quadratwurzel << endl;
    }
    


  • printf("%.15lf\n", quadratwurzel);

    %lf gibt double aus ...



  • Scheppertreiber schrieb:

    printf("%.15lf\n", quadratwurzel);

    %lf gibt double aus ...

    Ich dachte, das wär beim Output egal 😕



  • warum sollte das beim printf egal sein? woher soll printf denn wissen was für ein datentyp ausgegeben werden soll und wie die speicherstelle des parameters interpretiert werden soll?



  • dull schrieb:

    warum sollte das beim printf egal sein? woher soll printf denn wissen was für ein datentyp ausgegeben werden soll und wie die speicherstelle des parameters interpretiert werden soll?

    Es weiß es nicht. Also muß man printf das halt schonend per Format-String beibringen ...



  • Scheppertreiber schrieb:

    %lf gibt double aus ...

    Nein, %f gibt double und float aus. Eine Unterscheidung ist da (im Gegensatz zu scanf) nicht notwendig, weil ein float automatisch in double konvertiert wird, wenn er als Teil einer variablen Argumentliste übergeben wird.





  • MFK schrieb:

    weil ein float automatisch in double konvertiert wird, wenn er als Teil einer variablen Argumentliste übergeben wird.

    Steht das irgendwo in einem "offiziellem" Dokument?
    Gilt das auch für Targets bei denen nur für 32Bit-float ein nativer Hardware-Support vorhanden ist und 64Bit-double zwar vom Compiler unterstützt wird aber per SW emuliert werden muss?



  • Frager schrieb:

    Steht das irgendwo in einem "offiziellem" Dokument?

    Ja, im C-Standard. Wo sonst :p

    Irgendwo unter "Promotions".

    Gilt das auch für Targets bei denen nur für 32Bit-float ein nativer Hardware-Support vorhanden ist und 64Bit-double zwar vom Compiler unterstützt wird aber per SW emuliert werden muss?

    Ja, theoretisch schon. Kann aber sehr gut sein, dass der Compiler eine Option bietet, mit der man zwischen strikter ANSI-Konformität und effizienterem Code umschalten kann.


Anmelden zum Antworten