Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Hilfe! IEEE Long Real 64 Bit Berechnung. (https://www.delphipraxis.net/92208-hilfe-ieee-long-real-64-bit-berechnung.html)

Ivexx 16. Mai 2007 07:47


Hilfe! IEEE Long Real 64 Bit Berechnung.
 
Hi,

kann mir einer Hilfestellung bei der IEEE Long Real 64 Bit Berechnung geben? Hat jmd. eine Quelle, wo ich Schritt für Schritt in Pascal die Berechnung vornehmen kann?
Ich muss von einer Real-Zahl (+123,23) die gewünschte Eingabe in Sedezimal und dann in Binär umrechnen. Hierfür soll ich das IEEE Long Real 64 Bit-Format benutzen. Kann mir einer weiterhelfen wie ich das mache? Es soll auch + und - erkannt und berücksichtigt werden bei der Umrechnung.


Mit freundlichen Grüßen, Ivexx

Der_Unwissende 16. Mai 2007 08:05

Re: Hilfe! IEEE Long Real 64 Bit Berechnung.
 
Hi und erstmal herzlich Willkommen in der DP :dp:

Ein kleiner Tipp, Du solltest möglichst immer angeben, wenn Du eine Frage in mehr als einem Forum stellst. So werden sicherlich ein paar Leute auch im DF (oder auch woanders tätig sein (Dir also auch dort helfen). Ohne den entsprechenden Hinweis kommt es leicht zu "Doppeltposts", so dass Dinge die Du schon im DF oder eben hier erklärt hast im jeweils anderen Forum bereits beantwortet wurden. Deshalb füge doch bitte den Hinweis (samt Link) auf den anderen Thread ein (und tue ruhig gleiches im DF, dürfte auch dort gern gesehen werden).

Gruß Der Unwissende

Ivexx 16. Mai 2007 08:40

Re: Hilfe! IEEE Long Real 64 Bit Berechnung.
 
Danke! :)

Geht klar. Hier der Link zu bereits gepostetem:

Erste Antworten.

MfG, Ivexx

sirius 16. Mai 2007 09:20

Re: Hilfe! IEEE Long Real 64 Bit Berechnung.
 
Ich nehme mal die Zahl als Beispiel um sie in binär umzuwandeln. Fehler sind bestimmt drin und hab auch keine Ahnung, ob man das einfacher machen kann:

123,23=

1 * 2^6 (Rest: 59,23)
+1 * 2^5 (27,23)
+1 * 2^4 (11,23)
+1 * 2^3 (3,23)
+0 * 2^2 (3,23)
+1 * 2^1 (1,23)
+1 * 2^0 (0,23)
,
+0 * 2^-1 (0,23)
+0 * 2^-2 (0,23)
+1 * 2^-3 (0,105)
+1 * 2^-4 (0,0425)
+1 * 2^-5 (0,01125)
+0 * 2^-6 (0,01125)
+1 * 2^-7 (0,003438)
+0 * 2^-8
+1 * 2^-9
Wenn ich kein Fehler gemacht habe geht das noch ne Weile so weiter. Bei Double ist die Mantisse 52 bit breit, ich hab jetzt die ersten 16 ausgerechnet.

Jetzt kannst du das aufschreiben als:
1111011,001110101....

Jetzt wird das Komma nach vorne verschoben (ich bin mir nicht genau sicher, ob vor oder hinter die erste 1; ich mach mal hinter)
1,111011001110101... (* 2^6) <-- wichtig: Exponent (ist Anzahl der Stellen)

Der Exponent ist bei Double 11 bit breit. Da der Exponent immer positiv gespeichert wird, müssen wir immer 2^(11-1)-1 = 1023 dazuaddieren --> 6+1023 = 1029

1029 in binär --> 10000000101


Damit hätten wir unser double zusammen:

Vorzeichenbit: (positiv) 0
Exponent : 10000000101
Mantisse :(ohne Komma)1111011001110101...

Zweites großes Fragezeichen meinerseits: Bei der Mantisse wird laut IEEE eigentlich die führende 1 weggelassen (da sie immer da ist), aber ich glaub der Rechner hält sich da nicht dran :gruebel:
also Manitsse: 111011001110101...(wie gesagt: 52 Stellen :mrgreen: )


Ich mach mal mit Mantisse ohne führende 1 weiter.
Unser Doublewert (VZ - Exp - Mant):
010000000101111011001110101....
und schöner gruppiert:
0100 0000 0101 1110 1100 1110 101....
demnach ist die Hexdarstellung davon; die Vierergruppen (wie heißen die gleich nochmal :gruebel: ) einzeln umsetzen:
405ECE....
(weiß nicht ob du mit Sedezimal, was anderes meinst)

Edit: 1 Fehler im Text berichtigt

Edit2: Wow, lag ich gut :mrgreen: . Hab grad mal geschaut, was der Rechner nun wirklich macht. Also er lässt wirklich die führende 1 weg :stupid: .
Ergebnis: 40 5E CE B8 51 EB 85 1F

Edit3: kleiner Schönheitsfehler :mrgreen:

Ivexx 20. Mai 2007 09:56

Re: Hilfe! IEEE Long Real 64 Bit Berechnung.
 
Das ist schonmal sehr nice was du da gepostet hast. Da ich sau blutiger anfänger bin, hab ich noch ein kleines Problem mit der Umsetzung. Vielleicht kann mir da jmd. noch ein wenig weiterhelfen.

MfG, Ivexx


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:48 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz