Autor Beitrag
lisa1999
Hält's aus hier
Beiträge: 6



BeitragVerfasst: Fr 13.03.20 18:04 
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 +...)?
Einloggen, um Attachments anzusehen!
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4464
Erhaltene Danke: 919


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Fr 13.03.20 19: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.

Für diesen Beitrag haben gedankt: lisa1999
lisa1999 Threadstarter
Hält's aus hier
Beiträge: 6



BeitragVerfasst: Fr 13.03.20 20:30 
Ich habe dann ja rein theoretisch das Ganze in einen big endian umgewandelt.
Laut Wikipedia kann ich den single in BIG endian so berechnen:
upload.wikimedia.org...E-754-single.svg.png

Das heißt meine Charakteristik sind die ersten 8 Bytes also AE und die Mantisse sind der Rest 69 B2 32, wenn ich die beiden einzeln berechne, komme ich auf:


AE 69 B2 32
=> 174,6926898 ?

und 1 byte bleibt für das Vorzeichen.
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4464
Erhaltene Danke: 919


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Fr 13.03.20 20: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.

Für diesen Beitrag haben gedankt: lisa1999
lisa1999 Threadstarter
Hält's aus hier
Beiträge: 6



BeitragVerfasst: Sa 14.03.20 20: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
Einloggen, um Attachments anzusehen!
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4259
Erhaltene Danke: 911

Win10
C#, C++ (VS 2015/17)
BeitragVerfasst: So 15.03.20 09:46 
Hast du schon in den Wikipedia-Link zu IEEE754 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
ausblenden 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:
ausblenden Quelltext
1:
2:
3:
4:
11010011011001000110010 (binär) = 6926898 (dezimal)

M = 6926898 / 2^23 = 6926898 / 8388608‬
  = 0,8257505893707275390625‬

Und dann entsprechend auf
ausblenden 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

Für diesen Beitrag haben gedankt: lisa1999