IEEE-754 Fliesskommazahl und S5

Ingo dV

Level-1
Beiträge
61
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Moin, ich benötige mal einen Denkansatz!

Ich habe einen IEEE 754 Fliesskommawert (Messwert), den ich in einer S5 (CPU 944B) mit einem Wert aus einem Visualisierungssystem vergleichen muss.

Der Wert besteht aus 4 Byte und wir wie folgt übertragen: Messwert=(-1)vz X 2(E-127) X (1+F). [kursiv = Hochzahl]
Ich habe also im ersten Byte das Vorzeichen (Bit7), dann den Exponent (Bit6-Bit0), im zweiten Byte im Bit7 auch den Exponent, Rest von Byte 2 sowie Byte 3+4 ist dann die Mantisse.

Nun, wie kann ich am besten den Wert maskieren oder normieren, damit ich ihn in der S5 vergleichen kann.

Jemand 'ne Idee :?:
 
Idee

Ich denke ich hab ne Idee:

Ich werde die Mantisse auf 3 Zahlen beschränken und die Kommastelle um 3 Stellen verschieben um dann eine Ganzzahl zu bekommen z.B.


40 F0 00 00 (hex) = 0100 0000 1111 0000 0000 0000 0000 0000 (bin)

= (-1)0 x 2(2) x (1 + 0.5 + 0.25 + 0.125)
= 7,5

wenn ich die ersten 3 Bits der Mantisse auf Merker lege, über einen Sprungbefehl die Werte 500, 250, 125 den Bits zuordne, den Exponenten ausmarkiere und dann multipliziere bekomme ich einen Wert von 7500 und den kann ich dann vergleichen. Die letzten Zahlen den Mantisse kann ich als Messgrösse vernachlässigen.

Hat jemand eine bessere Idee ?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich hab´ vor Jahren mal so was machen müssen. Wenn das Prinzip nicht reicht, kann ic dir morgen oder übermorgen den Code schicken. Im Prinzip habe ich das so gelöst:
Mein Meßgerät liefert einen Wert von 0 - 1000 oder so ähnlich als Gleitkomma. Es ist also klar, daß alle Zahlen auch ohne Skalierung in ein Wort passen.
Ich ziehe den Exponenten von dem einer 32768.0 in Gleitkommadarstelung ab und kopiere das Ergebnis in ein MB, z.B. MB12, damit ich auf die Bits einzeln zugreifen kann.
Die verbleibenden Bits geben mir nun an, um wieviel ich die Mantisse rechts schieben muß, um ein Wort zu erhalten. Das können höchstens 15 mal schieben sein, sonst bleibt nix übrig. Ich kopiere die höchstwertigsten Bits der 23-Bit Mantisse in das Wort, ergänze die vordee eins durch ein UW mit 8000h.

Anschließend springe ich abhängig von den Bits im MB12:
L MW 10 // Mantisse
UN M 12.3
SPB = nichtAchtMalSchieben
SRW 8
nichtAchtMalSchieben:UN M 12.2
SPB = nichtVierMalSchieben
SRW 4
nichtVierMalSchieben:UN M 12.1
SPB = nichtZweiMalSchieben
SRW 2
nichtZweiMalSchieben:UN M 12.0
SPB = nichtEinMalSchieben
SRW 1
nichtZweiMalSchieben:NOP 0
Wenn die Differenz der Exponenten also 15 war, ist die Zahl um 15 Bit rechtsgeschoben.
 
Zurück
Oben