Entwickler-Ecke
Alle Sprachen - Alle Plattformen - Little endian
lisa1999 - Fr 13.03.20 17:04
Titel: Little endian
Gegeben ist eine Speicheradressen 0000H bis 0003H
die vier Bytes einer Single-Precision-Gleitkommazahl nach IEEE754.
Siehe Anhang
Die Bytes sind im Little endian Format gespeichert.
Ist es richtig wenn ich sie so berechne ?:
32B269AE
3*16^0* + 2*16^1 + B*16^2 + 2*16^3 + 6*16^4 + 9*16^5 + A*16^6 + E*16^7
=3935709987
oder Wandel ich die Tabelle um in eine Big endian Tabelle und lese sie rückwärts.:
AE 69 B2 32 = 2926162482 (mit der normalen Berechnung von hinten 2*16^0 +3*16^1 +...)?
Ralf Jansen - Fr 13.03.20 18:25
Zweites ist richtiger als erstes.
Zweites wäre das richtige Ergebnis bei einer Frage nach der Integer(Ganzzahl) Darstellung und des Werts in Dezimaldarstellung.
Bei IEE754 gehts aber um Gleitkommazahlen. Du mußt deine Bytefolge also in Exponent und Mantisse zerlegen und deren Wert in Dezimaldarstellung wandeln.
Ralf Jansen - Fr 13.03.20 19:57
Du übersiehst das das sign bit nicht zum Exponenten gehört. Es ist 1 bit Vorzeichen dann 8 bit Exponent und dann 23 bit Mantisse.
Es hilft dir vielleicht wenn du entsprechend dem Bild dir das Bitmuster erstellst dann wieder in die 3 Bestandteile zerlegst (1-8-23) und diese dann umrechnest.
lisa1999 - Sa 14.03.20 19:16
Ich habe die 2926162482 in Binär umgewandelt.
1 01011100 11010011011001000110010
- 92-127=-35 0,825018
Ich habe das ganze danach noch von einem Tool berechnen lassen. Siehe Anhang.
Wie kommt das Programm auf die -5.313 und warum ist die Mantissa 1,82.. und nicht 0,825
Th69 - So 15.03.20 08:46
Hast du schon in den Wikipedia-Link zu
IEEE754 [
https://de.wikipedia.org/wiki/IEEE_754] geschaut?
Zitat: |
Schließlich ist die Mantisse 1 ≤ m < 2 ein Wert, der sich aus den p Mantissenbits mit dem Wert M als m = 1 + M/2^p berechnet. Einfacher ausgedrückt denkt man sich an das Mantissenbitmuster M links eine „1,“ angehängt: m = 1,M.
|
Bei deinen Werten also
Quelltext
1:
| -1,825018 * 2^(92-127) = -1,825018 * 2^-35 = -5,31150144524872303009033203125e-5 = 0,0000531150144524872303009033203125 |
Beachte das
e-5 (d.h.
*10^-5) bei dem berechneten Wert (ich denke, dein Tool hat das auch so berechnet, nur du hast es übersehen).
PS: Ich komme bei der Mantisse (mit dem Windows-Taschenrechner) auf einen leicht anderen Wert:
Quelltext
1: 2: 3: 4:
| 11010011011001000110010 (binär) = 6926898 (dezimal)
M = 6926898 / 2^23 = 6926898 / 8388608 = 0,8257505893707275390625 |
Und dann entsprechend auf
Quelltext
1:
| -1,8257505893707275390625 * 2^-35 = -5,3136335609327289830616791732609e-11 |
Aber auch da kann ich mich verrechnet haben, aber so paßt es wohl auch eher zu der Ausgabe des Tools - aber wie schon geschrieben, beachte dann hinten die Angabe des
e-11.
PPS: Mit einem Online IEEE754 Tool habe ich es auch noch mal nachrechnen lassen und es kommt auf (gerundet) -5.3136336E-11 (und bei der Rückumwandlung auf 0xAE69B232). qed
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2024 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!