Fließkommaformat single precision

  • Hallo Leute,

    ich habe in der Uni eine Übungsaufgabe bekommen mit der ich nicht richtig zurecht kommen. Zumindest noch nicht, weil wir kein Rechenbeispiel haben.

    Und zwar lautet eine z.b.:

    Welcher Fließkommazahl entspricht die unten stehende Bitfolge?
    Interpretieren Sie die Bitfolge als eine Zahl im IEEE754 Fließkommaformat mit
    einfacher Genauigkeit (single-precision).

    0100 0000 0100 0000 0000 1000 0000 0000


    Ich weiß nicht wie man das formal macht bzw. die Bits zerlegt.

    Hoffe mir kann jemand helfen!

    Danke !

  • Du kannst es dann auch experimentell überprüfen:

    Code
    #include <stdio.h>
    int main(void){
    	unsigned int i=0x40400800;  //das ist deine Zahl
    	float *f=(float*)&i;
    	printf("%.20f\n",*f);
    	return 0;
    }


    Dabei kommt 3.00048828125 heraus.

    Zur Überprüfung:

    Code
    {
    		float g=3.00048828125;
    		unsigned int *h=(unsigned int *)&g;
    		printf("%x\n",*h);
    	}


    Dabei kommt wieder 0x40400800 heraus.

  • Danke für die Tipps!

      Dimitri

    Was für ein Format hat die Zahl 0x40400800 ?

    Wenn ich z.b. die Zahl -2,6 binär darstellen möchte, dann macht man es ja so:

    2^1+2^-2+2^-3+......=2+0,25+0,125.....=2,6

    Ich bin bis 10^-12 gekommen, aber es ist noch ein ganzes Stück...kann man das irgendwie schneller herausfinden?

  • Zitat von xxyy

    Danke für die Tipps!

      Dimitri

    Was für ein Format hat die Zahl 0x40400800 ?


    Es ist eine Hexadezimalzahl, weil es mit 0x anfängt.
    Jede Hexadezimalziffer sind 4 Bits, also 4 =0100, 0=0000, 4=0100, 0=0000, 0=0000, 8=1000, 0=0000, 0=0000.

    Zitat


    Wenn ich z.b. die Zahl -2,6 binär darstellen möchte, dann macht man es ja so:

    2^1+2^-2+2^-3+......=2+0,25+0,125.....=2,6

    Ich bin bis 10^-12 gekommen, aber es ist noch ein ganzes Stück...kann man das irgendwie schneller herausfinden?


    Du hast 0,5 vergessen. Es wird aber trotzdem nie aufhören, da 2,6 nicht exakt dargestellt werden kann.

  • 0x.... ist normalerweise die Schreibweise für hexadezimale Zahlen und
    0x40400800 entspricht Deiner binären Zahl, jedoch als vorzeichenlose Ganzzahl betrachtet. Das was Dimitrij hier macht ist nichts anderes als an eine Speicherstelle die Binärzahl zu schreiben und die selbe Binärzahl ausgeben als wäre sie IEEE754 formatiert. Sollte in Deinem Fall aber nur zur Kontrolle verwendet werden, da Du hier ja nicht mitverfolgen kannst wie umgerechnet wird.

    Dein Beispiel
    0100 0000 0100 0000 0000 1000 0000 0000

    1.) Bits gruppieren

    0 10000000 (1,)10000000000100000000000 
    Vorzeichen (1bit)
    Exponent (8bit)
    Mantisse (23bit + 1 impliziertes erstes Bit)

    2.) Exponent bestimmen

    10000000b = 128
    Exponent = E - 127 = 128-127 = 1
    => Verschiebung des Kommas um 1 (= Multiplikation mit 2[h]1[/h]) und danach hinzufügen des implizierten 1 Bits
    => 11,0000000000100000000000

    3.) Zahl bestimmen
    11,0000000000100000000000 =
    1*2[h]1[/h] + 1*2[h]0[/h] + 0*2[h]-1[/h] + 0*2[h]-2[/h] + .... + 1*2[h]-11[/h] + ... =
    = 2[h]1[/h] + 2[h]0[/h] + 2[h]-11[/h] = 3,00048828125

  • Zitat von Dimitrij


    Du hast 0,5 vergessen. Es wird aber trotzdem nie aufhören, da 2,6 nicht exakt dargestellt werden kann.


    kann man das so begründen, dass in single precision nicht genug Bits vorhanden sind um die Zahl darzustellen?

    Oder hat das eine anderen Grund?


    mas

    dankeschön für die Ausführung. Wozu dient das implizierte Bit?

  • Das implizierte erste Bit verwendet man dafür um sich eine Mantissenstelle zu ersparen. Und zwar indem man einfach voraussetzt, dass vor dem Komma 1 steht (ok, man setzt nicht voraus, sondern IEEE 754 sieht es so vor ;)

    Ist genauso wie die "wissenschaftliche" Schreibweise von Zahlen.
    zB:
    704,50354 => 7,0450354*10[h]2[/h]
    0,03248 => 3,248*10[h]-2[/h]

    nur bei binärzahlen gibts ja nur 0 oder 1, daher kann man die Vorkommastelle weglassen.

  • Achso ja ist logisch...

    Unser Prof hat uns gefragt, was die größte und kleinste Zahl ist die mit Single Precision IEEE754 Floating-Point Zahlen dargestellt werden können.

    Das ist ja 2^-126 und (2-2^-23)*2^127
    Habe ich von hier

    Er meinte dass es dafür eine triviale Antwort und eine nicht triviale Antwort gibt. Was meint er?

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!