Praktikum 2 - Problem mit Gleitkomma-Konversion

mister_tt
Kernelcompilierer
Kernelcompilierer
Beiträge: 502
Registriert: 29. Sep 2008 15:54

Praktikum 2 - Problem mit Gleitkomma-Konversion

Beitrag von mister_tt »

Moin,

Code: Alles auswählen

.data
Number: .double 8589934591.

.text
l.d $f0, Number
cvt.w.d $f4, $f0
Nach meinem Verständnis dieser *** cvt-Befehlen müsste in $f0 anschließend der Integer-Wert von meiner Number 8589934591 stehen... Dem ist aber nicht so. Was wird da berechnet?

Für jedwede Hilfe bin ich dankbar.
Viele Grüße,
Simon

Benutzeravatar
AlexPi11
Endlosschleifenbastler
Endlosschleifenbastler
Beiträge: 154
Registriert: 18. Apr 2009 15:32

Re: Praktikum 2 - Problem mit Gleitkomma-Konversion

Beitrag von AlexPi11 »

Edit: vorher stand hier Quarck

cvt.w.d liefert die Ganzzahl vor dem Komma als integer im 2ten Register. Also so sieht es zumindest aus, wenn man ein wenig im MIPS spielt.

Edit2:
Probleme bei deiner Zahl werden wohl entehen, da sie nicht in ein 32bit-Register passt (2^32 = 4294967296 < 8589934591)
Zuletzt geändert von AlexPi11 am 29. Nov 2009 14:00, insgesamt 1-mal geändert.

mister_tt
Kernelcompilierer
Kernelcompilierer
Beiträge: 502
Registriert: 29. Sep 2008 15:54

Re: Praktikum 2 - Problem mit Gleitkomma-Konversion

Beitrag von mister_tt »

... und genau das will ich doch!?

Es funktioniert soweit auch, wenn die Zahl < (2^31 - 1) ist, d.h. in einem Register darstellbar. Wenn sie größer ist, würde ich erwarten, dass der Befehl die Integer-Zahl auf zwei Register aufsplittet (wie es bei Doubles ja auch gemacht wird)... Dem ist wohl nicht so?

Blöd, da ich die Mantisse auf dem Coprozessor in eine Ganzzahl umwandele (multiplizieren mit 2^(2s)) und dann gerne wieder auf dem normalen Prozessor haben würde, um die Wurzel zu berechnen... :?:

Benutzeravatar
AlexPi11
Endlosschleifenbastler
Endlosschleifenbastler
Beiträge: 154
Registriert: 18. Apr 2009 15:32

Re: Praktikum 2 - Problem mit Gleitkomma-Konversion

Beitrag von AlexPi11 »

Man braucht auch kein cvt.w.d
Die Mantisse steht ja in den f-Registern auf 52 Bit veteilt. Man muss also nur den unnötigen Teil (Exponent z.B.) loswerden und eventuell eine 1 vorne anhängen.

Benutzeravatar
hm
Mausschubser
Mausschubser
Beiträge: 71
Registriert: 26. Okt 2004 23:51
Wohnort: DA

Re: Praktikum 2 - Problem mit Gleitkomma-Konversion

Beitrag von hm »

Kriegt man das vielleicht mit den Hi und Lo Registern irgendwie gedeichselt?

Aber: wie kommst Du denn auf das s?
Quis custodiet ipsos custodes?
(Decimus Iunius Iuvenalis, Satirae VI)

ivoch
Endlosschleifenbastler
Endlosschleifenbastler
Beiträge: 199
Registriert: 3. Mär 2004 10:51

Re: Praktikum 2 - Problem mit Gleitkomma-Konversion

Beitrag von ivoch »

mister_tt hat geschrieben:Moin,

Code: Alles auswählen

.data
Number: .double 8589934591.

.text
l.d $f0, Number
cvt.w.d $f4, $f0
Nach meinem Verständnis dieser *** cvt-Befehlen müsste in $f0 anschließend der Integer-Wert von meiner Number 8589934591 stehen... Dem ist aber nicht so. Was wird da berechnet?

Für jedwede Hilfe bin ich dankbar.
Viele Grüße,
Simon
Der Integer-Wert steht nach Ausführen von cvt.w.d $f4, $f0 nicht in $f0, sondern in $f4. :wink:

Schau dir nochmal was in $f4 steht und überleg dir dann - passt deine Zahl überhaupt in einem 32-bit Integer-Register rein?

Benutzeravatar
AlexPi11
Endlosschleifenbastler
Endlosschleifenbastler
Beiträge: 154
Registriert: 18. Apr 2009 15:32

Re: Praktikum 2 - Problem mit Gleitkomma-Konversion

Beitrag von AlexPi11 »

Also wir sind einfach davon ausgegangen, dass es immer 52 Nachkommastellen sind.
Man könnte auch durch Shiften und Vergleiche rausfinden, wieviele Nachkommastellen man ohne 0er am Ende hat.

mister_tt
Kernelcompilierer
Kernelcompilierer
Beiträge: 502
Registriert: 29. Sep 2008 15:54

Re: Praktikum 2 - Problem mit Gleitkomma-Konversion

Beitrag von mister_tt »

ivoch hat geschrieben:Schau dir nochmal was in $f4 steht und überleg dir dann - passt deine Zahl überhaupt in einem 32-bit Integer-Register rein?
Ne schon klar, nicht in ein 32-Bit-Register... Habe ich ja dann noch geschrieben... Frage dann: Was passiert wenn es nicht in ein Register passt?

mister_tt
Kernelcompilierer
Kernelcompilierer
Beiträge: 502
Registriert: 29. Sep 2008 15:54

Re: Praktikum 2 - Problem mit Gleitkomma-Konversion

Beitrag von mister_tt »

Ich präzisiere nochmal meine Frage von vorhin... Ich muss ja irgendwann mal Mantisse * 2^(2s) berechnen. Dies mache ich auf dem Coprozessor. Um die Wurzel ziehen zu können, brauche ich diese Zahl, die aber ja potentiell nicht mehr in ein Register passt, wieder auf dem normalen Prozessor als "normale" Integer (dann halt in zwei auf einander folgenden Registern)... Wie kann ich das machen? :?

Danke für eure Hilfe...

Antworten

Zurück zu „Archiv“