Immer nur Float ?



  • Da ich nicht unbedingt soviel Erfahrung habe wie cout Fliesskommazahlen handelt, gebe statt

    cout<<mypi<<endl;
    

    folgendes ein

    printf("%.10f\n", mypi);
    

    Hier müssten eigentlich 10 Nachkommastellen ausgegeben werden. Wenn dem so ist, wird dein Pi richtig interpretiert. Demzufolge musst du cout beibringen es deinen Wünschen entsprechend auszugeben. Das kann dir aber nur jemand sagen, der mehr Erfahrung mit cout hat als ich 😞 .



  • Hi

    Ich kann Dir sagen wie's mit printf(....) geht!

    Deine Formatangabe muss zum Daten- typ passen!

    float Z1=3.1415926535897932384626433832795;
    double Z2=3.1415926535897932384626433832795;
    long double Z3=3.1415926535897932384626433832795;

    printf("\n%f",Z1); // sehr viele Stellen abgeschnitten
    printf("\n%lf",Z2);// viele Stellen abgeschnitten
    printf("\n%Lf",Z3);// hier muesste das 19 stellig kommen!!!
    :p

    [ Dieser Beitrag wurde am 20.03.2003 um 22:30 Uhr von DerAltenburger editiert. ]



  • Nö, stimmt nicht.
    %f reicht völlig aus, denn %f steht nicht für float, sondern erwartet Typ double. l ist nur für Ganzzahlen (Integer), Zeichen und Strings zulässig. Einzig L kann für long double genutzt werden. Long Double wird aber nicht auf allen Plattformen unterstützt (zB Windows NT) und war in diesem Fall auch nicht gefordert. 😉



  • Nochwas,
    wenn printf bei %f keine Präzisionsangabe hat (das nach dem Punkt), wird standardmässig 6 genommen, dh 6 Stellen nach dem Komma.



  • Hallo,
    mit cout:

    #include <iostream>
    #include <ostream>
    #include <iomanip>
    using namespace std;
    double pi=3.1415926535897932384626433832795;
    int main()
    {
        cout << fixed << setprecision(16) << pi << endl;
    }
    


  • Original erstellt von groovemaster2002:
    Nö, stimmt nicht.
    %f reicht völlig aus, denn %f steht nicht für float, sondern erwartet Typ double. l ist nur für Ganzzahlen (Integer), Zeichen und Strings zulässig. Einzig L kann für long double genutzt werden. Long Double wird aber nicht auf allen Plattformen unterstützt (zB Windows NT) und war in diesem Fall auch nicht gefordert. 😉

    bei %f nimmt printf double? hmm.. also ließt die funktion dann, wenn ich
    printf("%f %f",1.f,2.f,3.f,4.f);
    übergebe jeweils 8byte prof F ein und würde dementsprechend nicht 1.f und 2.f ausgeben?

    ist mir aber nie passiert, könntest mir das bitte mal erklären?, den soweit ich weiß ist printf(const char*,...); die deklaration, und somit wird die float-variable nie in double konvertiert bevor sie über den stack übergeben wird... denn dann übergibt man float, der ließt wegen %f double ein und zeigt trotzdem die float werte an...?

    *glaubtaneinversehenvonGroovemaster2002*

    rapso->greets();



  • Original erstellt von rapso:
    den soweit ich weiß ist printf(const char,...); die deklaration, und somit wird die float-variable nie in double konvertiert bevor sie über den stack übergeben wird...*

    Doch immer. Das ist bei Funktionen mit variabler Argumentliste so 😉 Deshalb braucht printf auch nicht zwischen double und float unterscheiden, weil eh immer nur doubles rüberkommen.



  • also wird bei ... grundsätzlich float int double gecastet? gibt's da noch mehr? alle byte und short in int oder so?

    das höre ich um ehrlich zu sein zum ersten mal, deswegen: falls jemand nen link hat wo ich mir dat durchlesen kann wäre das nett zu posten.

    (ja ich hab nach printf ... float double gegoogled, kommt nur dresch raus)

    rapso->greets();



  • Hallo,
    such doch einfach mal nach variadic function

    Da findest du unter Anderem:

    Since the prototype doesn't specify types for optional arguments, in a call to a variadic function the *default argument promotions* are performed on the optional argument values. This means the objects of type char or short int (whether signed or not) are promoted to either int or unsigned int, as appropriate; and that objects of type float are promoted to type double. So, if the caller passes a char as an optional argument, it is promoted to an int, and the function can access it with va_arg (ap, int).



  • Ach du kake - jetzt blicke ich nicht durch...


Anmelden zum Antworten