320.25 im Double-Format < Maple < Mathe-Software < Mathe < Vorhilfe
|
Status: |
(Frage) reagiert/warte auf Reaktion | Datum: | 18:53 So 04.06.2006 | Autor: | schue |
Aufgabe | Berechnen Sie die Zahl 320.25 im Double Format und geben Sie das Ergbenis hexadezimal an. |
Ich habe diese Frage in keinem Forum auf anderen Internetseiten gestellt.
Ich möchte gern mit MAPLE folgende Aufgabe lösen:
"Berechnen Sie die Zahl 320.25 im Double Format und geben Sie das Ergbenis hexadezimal an."
Ich weiß schon, dass man mit den Formfunktionen
convert(320.25,binary); und
convert(320.25,hex);
die Zahl konvertieren kann, aber wie läuft das ganze im DOUBLE Format ab, denn so wie oben angegeben würde es ja im SINGLE Format sein!
Vielen Dank
MFG René
|
|
|
|
Hallo,
bist du sicher, dass die Aufgabe so gemeint ist?
Bei mir funktioniert die Funktion convert(x, binary/hexadecimal) mit gebrochenen Zahlen nicht. Außerdem gibt es bei Maple keine Unterscheidung zwischen single und double precision, da man die Anzahl der Nachkommastellen explizit angeben kann. Was es gibt, sind "hardware floats", aber die kommen nur in bestimmten Datenstrukturen vor (rtables).
Kann es sein, dass es um den ANSI/IEEE Standard 754-1985 geht? Das ist die Definition, wie floats im Computer dargestellt werden? Ist nur eine vage und vielleicht etwas aus den Fingern gesogene Vermutung, aber was anderes fällt mir dazu nicht ein...
Ach ja: Sind die Aufgaben unbedingt mit Maple zu lösen, oder willst du es nur damit machen?
Gruß
Martin
|
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 11:56 Mo 05.06.2006 | Autor: | schue |
Hallo,
DANKE erstmal für die rasche Antwort. Wie hättest du die Aufagbe denn gelöst? Genau lautet die Aufgabe: "Berechen Sie die Darstelung der Zahl 320.25 im Double Format und geben Sie das Ergebnis Hexadeziaml an!"
Das von dir beschriebene Maple Problem hab ich auch gehabt, deswegen hab ich ja gedacht, dass ich dort irgendwo einen Fehler gemacht habe.
Also ich denke deine Vermutung ist richtig. Es gibt ja verschiedenen Gleitkommadatentypen und ich habe ein Excel Programm der die Zahl ausrechnet aber nur für IEEE 754 (wenn das die Definition für SINGLE ist) dort kommt für 320.25=43A02000 HEX raus. Ichhabe das ganze mal für den Datentyp Double geamcht so wie es verlangt wurde und bei mir kommt jetzt für 320.25= 20390200 HEX raus!
Nun weiß ich aber nich ob das richtig ist und wollte dies überprüfen. Da ich aber nich weiß wie ich das anders überprüfen kann, hab ich es mit Maple versucht. Wenn es dort eine andere Möglichkeit gibt, wäre es schön wenn du sie mir zeigen könntest.
Danke
MfG René
|
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 15:45 Mo 05.06.2006 | Autor: | Martin243 |
Hallo,
hmm, dein double-Ergebnis überzeugt mich nicht, denn während single floats nur 32 Bit brauchen (ergibt 8-stellige Hex-Zahl), benötigt man für die Darstellung von double floats 64 Bit. Also müsste dein Ergebnis hexadezimal 16-stellig sein. Schau dir die Definition von doubles an:
Wikipedia
Ich poste dir mal in Kürze Maple-Programme, die die Hex-Werte überprüfen, wenn ich übermütig bin auch welche, die die Darstellung erzeugen.
Gruß
Martin
|
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 17:41 Mo 05.06.2006 | Autor: | Martin243 |
Hallo,
so die Progrämmchen sind fertig!
Umwandeln der Single-Float-Darstellung in Dezimalzahl:
single_SEM2dec := (Sign,Exp,Mantissa) -> evalf((1-2*Sign) * 2^(Exp-127) * (1 + Mantissa/(2^23))):
single_single2SEM := x -> ((floor(convert(x, decimal, hex)/2^31) , floor((convert(x, decimal, hex) mod 2^31)/2^23), convert(x, decimal, hex) mod 2^23)):
single_single2dec := x -> single_SEM2dec(single_single2SEM(x)):
Anwendung:
single_single2dec("43A02000");
Umwandeln der Dezimalzahl in Single-Float-Darstellung:
single_SEM2single := (Sign,Exp,Mantissa) -> convert(Sign*2^31 + Exp*2^23 + Mantissa , hexadecimal):
single_dec2SEM := x -> ((1-sign(x))/2 , 127 + floor(log[2](abs(x))) , floor(2^23*(abs(x) / 2^floor(log[2](abs(x))) - 1)) ):
single_dec2single := x -> single_SEM2single(single_dec2SEM(x)):
Anwendung:
single_dec2single(320.25);
Umwandeln der Double-Float-Darstellung in Dezimalzahl:
double_SEM2dec := (Sign,Exp,Mantissa) -> evalf((1-2*Sign) * 2^(Exp-1023) * (1 + Mantissa/(2^52))):
double_double2SEM := x -> ((floor(convert(x, decimal, hex)/2^63) , floor((convert(x, decimal, hex) mod 2^63)/2^52), convert(x, decimal, hex) mod 2^52)):
double_double2dec := x -> double_SEM2dec(double_double2SEM(x)):
Anwendung:
double_double2dec('407403FFFFDC15C0');
Umwandlung der Dezimalzahl in Double-Float-Darstellung:
double_SEM2double := (Sign,Exp,Mantissa) -> convert(Sign*2^63 + Exp*2^52 + Mantissa , hexadecimal):
double_dec2SEM := x -> ((1-sign(x))/2 , 1023 + floor(log[2](abs(x))) , floor(2^52*(abs(x) / 2^floor(log[2](abs(x))) - 1)) ):
double_dec2double := x -> double_SEM2double(double_dec2SEM(x)):
Anwendung:
double_dec2double(320.25);
Ich hoffe, der Code wird nicht durch die Formatierung verhunzt...
Gruß
Martin
|
|
|
|