![]() |
IEEE 754 Gleitkommazahl in Real-Zahl wandeln
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 ![]() Ich komme genau bis zu der Stelle, an der die Umwandlung der Nachkommastellen vorgenommen wird Zitat:
Hier mein Code bis zur Berechnung des Nachkommaanteils. Da ist dann ein Lücke :mrgreen:
Delphi-Quellcode:
Wenn mir da mal einer auf die Sprünge helfen kann?
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; Dank und Gruß oki |
Re: IEEE 754 Gleitkommazahl in Real-Zahl wandeln
Was hindert dich daran, deinen Parameter einfach auf Single zu casten und zuzuweisen?
Aber zur Theorie: 0,011 ist 2^-2 + 2^-3 ist 1/4 + 1/8 ist 0,25 + 0,125 ist 0,375.. :) Falls es das war, was sich dir entzogen hat... |
Re: IEEE 754 Gleitkommazahl in Real-Zahl wandeln
Hi,
Delphi wandelt die Gleitkommatypen automatisch ineinander um. Was du meinst ist ein Single:
Delphi-Quellcode:
var
Data: array[0..3] of byte; X: Real; begin //Hier steht jetzt deine Zahl drin: Data[3] := $42; Data[2] := $5a; Data[1] := $db; Data[0] := $d7; //Interpretiere diese Zahl als Single und wandle sie in einen anderen Gleitkommatyp um X := PSingle(@data)^; //Anzeigen ShowMessage(FloatToStr(X)); end; |
Re: IEEE 754 Gleitkommazahl in Real-Zahl wandeln
Ähm,
ist mir doch immer wieder peinlich so einfache Grundlagen verpennt zu haben und die naheliegende Lösung nicht zu sehen. Dann sollte das mit dem casten der einfachste Weg sein. Wer natürlich keine Ahnung hat fand meine Function aber bestimmt beeindruckend :mrgreen: Besten Dank an euch beide, damit komme ich jetzt klar. :thumb: Gruß oki |
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:04 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz