Hi Leute,
ich glaub, hier fehlen mir ein paar Grundlagen. Folgende Aufgabenstellung.
Ich bekomme eine Gleitkommazahl im IEEE 754 Format (42 5a
db d7).
Diese soll nach dem IEEE 754 Standard in einen Realwert gewandelt werden. Dieser sollte für den Wert "42 5a
db d7" die Zahl 54.714687 ergeben.
An dieser Stelle ist der Standard recht gut erklärt
IEEE 754.
Ich komme genau bis zu der Stelle, an der die Umwandlung der Nachkommastellen vorgenommen wird
Zitat:
Nachkommastellen:
0,0110011001100110011 (2) ≈ 0.39999961853 (10)
Weil die 0,4 im binären eine periodische Darstellung hat, kann sie nicht mehr genau umgewandelt werden
Wie wandel ich die Binärzahl in den Wert 0.399.. um? Das Thema mit dem Komma habe ich nicht begriffen. Eigentlich muss ich ja den Nachkommaanteil berechnen, der in meinem Fall 0,714687 ist.
Hier mein Code bis zur Berechnung des Nachkommaanteils. Da ist dann ein Lücke
Delphi-Quellcode:
function TDataRecord_07.IEEE745toFloat(Value: Integer): Real;
var
Sign: Boolean; // True = Vorzeichen (-); False = kein Vorzeichen (+)
Bias : Integer;
Exponent: Integer;
Mantisse: Integer;
IntValue : Integer; // Vorkommastellen
FracValue : Integer; // Nachkommastellen
begin
Sign := (Value and $80000000) = $80000000;
// da wir hier ausschließlich 32 Bit-Werte umrechnen wird ein fester Bias von 127 benutzt
Bias := 127;
Exponent := Value shl 1;
Exponent := Exponent shr 24 - Bias;
Mantisse := Value and $7FFFFF;
// Hidden-Bit dazu
Mantisse := Mantisse or $800000;
// Vorkomma ermitteln
IntValue := Mantisse shr (23 - Exponent);
// Nachkomma
FracValue := Mantisse shr (Exponent + 1);
FracValue := FracValue shl (Exponent + 1);
// Result := ;
if Sign then
Result := -Result;
end;
Wenn mir da mal einer auf die Sprünge helfen kann?
Dank und Gruß
oki