1. Dashboard
  2. Forum
    1. Unerledigte Themen
  3. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team-Mitglieder
    4. Trophäen
    5. Mitgliedersuche
  4. Tutorial Bereich
  • Deutsch
  • Anmelden
  • Registrieren
  • Suche
Dieses Thema
  1. Informatik Forum
  2. Webmaster & Internet
  3. Entwicklung

Fließkommaformat single precision

    • Frage
  • xxyy
  • 25. April 2005 um 00:29
  • Unerledigt
  • xxyy
    6
    xxyy
    Mitglied
    Punkte
    350
    Beiträge
    57
    • 25. April 2005 um 00:29
    • #1

    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 !

  • mas
    9
    mas
    Mitglied
    Reaktionen
    1
    Punkte
    751
    Beiträge
    143
    • 25. April 2005 um 07:31
    • #2

    Wikipedia sollte Dir weiterhelfen -> http://de.wikipedia.org/wiki/Gleitkommazahl (ganz unten)

  • Dimitrij
    7
    Dimitrij
    Mitglied
    Reaktionen
    12
    Punkte
    437
    Beiträge
    73
    • 25. April 2005 um 09:46
    • #3

    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.

    de.lernu.net, lingwadeplaneta.info

  • xxyy
    6
    xxyy
    Mitglied
    Punkte
    350
    Beiträge
    57
    • 25. April 2005 um 12:42
    • #4

    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?

  • Dimitrij
    7
    Dimitrij
    Mitglied
    Reaktionen
    12
    Punkte
    437
    Beiträge
    73
    • 25. April 2005 um 13:15
    • #5
    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.

    de.lernu.net, lingwadeplaneta.info

  • mas
    9
    mas
    Mitglied
    Reaktionen
    1
    Punkte
    751
    Beiträge
    143
    • 25. April 2005 um 13:43
    • #6

    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

  • xxyy
    6
    xxyy
    Mitglied
    Punkte
    350
    Beiträge
    57
    • 25. April 2005 um 16:25
    • #7
    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?

  • mas
    9
    mas
    Mitglied
    Reaktionen
    1
    Punkte
    751
    Beiträge
    143
    • 25. April 2005 um 16:47
    • #8

    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 :winking_face:

    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.

  • xxyy
    6
    xxyy
    Mitglied
    Punkte
    350
    Beiträge
    57
    • 25. April 2005 um 18:53
    • #9

    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?

  • Maximilian Rupp 27. Dezember 2024 um 12:06

    Hat das Thema aus dem Forum Programmieren nach Entwicklung verschoben.

Jetzt mitmachen!

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

Benutzerkonto erstellen Anmelden

Rechtliches

Impressum

Datenschutzerklärung

  • Alles
  • Dieses Thema
  • Dieses Forum
  • Seiten
  • Forum
  • Lexikon
  • Erweiterte Suche
  • Deutsch
  • English
Zitat speichern