Float und Double



  • Hallo liebe Forenmitglieder,
    ich bin ein wenig verzweifelt, was den Umgang mit Float und Double angeht. Ich kann mir beim besten Willen nicht vorstellen, wie diese Werte abgespeichert werden.

    #include <stdio.h>
    #include <math.h>
    
    int main()
    {
    
    float fzahl = 276119342;
    int   izahl = 276119342;
    
    printf("%f\n", fzahl); // Ausgegeben wird 276119328
    printf("%e\n", fzahl); // Ausgegeben wird 2,761193*10^8
    printf("%i\n", izahl); // Ausgegeben wird 276119342
    
    fflush(stdin);
    getchar();
    return(1);
    
    }
    

    Ich hab bereits herausgefunden, dass mir die Zahlen im Bereich von -2^24 bis +2^24 korrekt dargestellt werden. Auch jede Variation bei der sich das Kommata zwischen den Ziffern der Zahl 16777216 (2^24) verschiebt und somit beispielsweise 167,7216 als Variable deklariert wurde wird mir korrekt ausgegeben. Je stärker die Zahlen nach oben von diesem Wert abweichen, desto größere Fehler gibt es.
    Die 2^24 hab ich herausgefunden haben irgendwas mit der Mantisse zu tun. Allerdings kann ich mir den Zusammenhang schlecht erklären.
    32 Bit: 1 Bit Vorzeichen ; 8 Bit Expo ; 23 Bit Mantisse (und irgendwie doch 24 weil 1<m<2 gilt und daher der Wert 1 nicht abgespeichert wird).

    Mein Hauptproblem liegt darin, dass ich mir in keinster Weise vorstellen kann, wie der Beispielwert oben (276119342) abgespeichert wird.
    Als Int: (4 weitere Bit) 0001 0000 0111 0101 0011 1111 0010 1110
    Als Float: - 😞 keine Ahnung

    Wie ein Int kann er ja nicht abgespeichert werden, sonst wären die Werte ja korrekt und keine Rundunsfehler würden auftreten.

    Könnte mir evtl. bitte jemand helfen und mir zeigen, wie die Beispielzahl als Binary-Code gespeichert wurde, und wie sie später wieder zu dem Ausgabewert (mit Rundungsfehler) umgewandelt wird?



  • Schau dir mal den IEEE-754 Floating Point Standard an. Da wird genau definiert wie floats abgespeichert werden.



  • Wo hast du denn schon überall geschaut?

    Erste Anlaufstelle wäre Wikipedia: http://de.wikipedia.org/wiki/Flie%C3%9Fkommazahl
    Da findest du den Hinweis auf die IEEE_754



  • Hast Du schon mal bei Wikipedia geschaut:
    http://de.wikipedia.org/wiki/IEEE_754

    Da finde ich es ganz gut dargestellt.

    Ciao, Allesquatsch





  • Vielen Dank,
    ihr habt mir sehr geholfen.
    Ich bin bereits seit heute morgen am experimentieren mit Datentypen und bin die ganze Zeit nur auf irgendwelchen Uni-Folien herumgehüpft,
    die mir mit ihrer Darstellungsweise den Kopf verdreht haben 🤡 Vielleicht isses mal wieder Zeit für ne Pause.

    Ich bin froh, dass ichs heut noch hinbekommen hab 😋
    Danke nochmal.


Log in to reply