|
Hallo,
ich bin Informatikstudent und schreibe bald eine Klausur in Rechnerarchitektur. Dabei gibt es ein mathematisches Thema, dass ich nicht ganz verstehe.
Und zwar geht es um die Konvertierung von Hexadezimalzahlen in das Gleitkommaformat IEEE (32bit).
In einer Übung eines früheren Semesters gab es eine Aufgabe:
Gegeben ist ein Wort aus einem hexadezimalen Speicherauszug . Zerlegen Sie die Datenworte (es waren noch andere zwei andere Worte, aber ich habe beispielhaft das eine mal genommen) in ihre Bestandteile nach IEEE und geben Sie diese an.
Geben Sie anschließend die Gleitkommazahl als Dezimalzahl an (VZ-Charakteristik-Mantisse)!
Ich habe das jetzt mehrfach gerechnet, erhalte aber nie die richtige Lösung.
Hier meine Rechnung:
Umwandeln von Hexadezimalzahl in Dualzahl:
Erstes Bit ist hierbei eine 1 und deswegen ist die Zahl wohl negativ (VZ .
Normalisieren, also das Komma rechts direkt neben das Vorzeichenbit verschieben. Dadurch muss man natürlich den oben weggelassenen Exponenten 0 (also verändern. Hierbei wäre das weil das Komma von ganz rechts Stellen nach links geschoben werden muss.
Laut Beschreibung des IEEE-Standards berechnet sich die Charakteristik der Gleitkommazahl aus . ist hierbei die Bias-Konstante, die für 32bit bei 127(Dezimal) liegt. Also: . in Binär:
Also hätten wir hier schon mal den VZ-Teil und den Charakteristik-Teil der Lösung: Mantisse. Fehlt nur noch die Mantisse, die man oben aber auch leicht ablesen kann: usw.
Meine Lösung ist also:
Laut einem verlässlichen Internet-Konverter ist das Ergebnis allerdings:
Und wer tatsächlich bis zu dieser Stelle hier mitgelesen bzw. mitgedacht hat, kann mir hoffentlich erklären, wo mein Fehler liegt. Das wäre sehr wichtig!
Liebe Grüße antilopo
Für alle, die mir helfen möchten (automatisch von OnlineMathe generiert): "Ich möchte die Lösung in Zusammenarbeit mit anderen erstellen." |
|
anonymous
18:42 Uhr, 23.02.2015
|
Falls es dir noch nicht aufgefallen ist: Das verlässliche Ergebnis aus dem Internet ist einfach in Dualzahl umgewandelt, wie du es bei schon richtig gemacht hast, und Vorzeichen|Charakteristik|Mantisse abgegrenzt.
Was du bei und ist mir schleierhaft.
"Dadurch muss man natürlich den oben weggelassenen Exponenten 0 (also verändern." Der Exponent ist ja gar nicht weggelassen, sondern in der Charakteristik kodiert.
" Hierbei wäre das weil das Komma von ganz rechts Stellen nach links geschoben werden muss." Woher kommen die ? Den Exponenten weißt du doch noch gar nicht. Diesen musst du aus der Charakteristik ermitteln.
Die Charakteristik sind die 8 bit hinter dem Vorzeichen. Hier solltest du also von der in ermittelten Dualzahl ablesen:
Damit kann dann der Exponent über mit Biaswert ermittelt werden:
Wie du siehst, ist der Exponent hier und nicht wie von dir angenommen.
Der Nachkommaanteil der Mantisse sind die bit hinten. (Nicht direkt hinter dem Vorzeichen, wo du sie anscheinend ablesen wolltest, sondern hinter Vorzeichen und Charakteristik.)
Also:
Demnach ergibt sich folgende Mantisse:
Zusammenfassende Bemerkung: Anstatt dir von irgendwoher einen falschen Exponenten zu besorgen und daraus eine falsche Charakteristik zu berechnen, ist es ganz einfach:
Die durch Umwandlung von erhaltene Dualzahl mit Länge bit unterteilst du einfach folgendermaßen in Abschnitte:
Vorzeichen | Charakteristik | Mantisse 1 bit bit bit
Das ist schon der erste Teil.
|
|
Vielen Dank kenkyu für deine Mühe!
Du hast mir wahnsinnig geholfen! Ich habe die Ausgabe des Internet-Konverters fehlinterpretiert und darauf basieren auch all meine anderen Fehler.
Das mit den als Exponent kam daher, weil ich kein Komma in der 32-Bit-Zahl hatte und dachte "ich normalisier dann mal und schiebe das Komma bis an die rechte Seite des Vorzeichenbits". Das war natürlich völliger Blödsinn von mir.
Danke für die wirklich hervorragende Erklärung!
Liebe Grüße
|