Mantisse zu Ganzzahl machen

linn
Mausschubser
Mausschubser
Beiträge: 77
Registriert: 15. Okt 2008 21:16

Mantisse zu Ganzzahl machen

Beitrag von linn »

Hi,

wir ham Probleme damit, aus der Mantisse ne Ganzzahl zu machen. Wenn wir die Mantisse um 2s Stellen nach links verschieben haben wir ja schon 2*52 104 bit + 1 für die 1 = 105 bit - bräuchten also vier(!) 32-bit-register...
Oder machen wir da irgendwas falsch?

Jonathan
Mausschubser
Mausschubser
Beiträge: 47
Registriert: 10. Okt 2008 13:37

Re: Mantisse zu Ganzzahl machen

Beitrag von Jonathan »

Man kann aus der Formel noch einmal 2^s rauskürzen. Dann hat man rechts x * 2^s stehen, d.h. x ist direkt in der richtigen Darstellung als Fixkommazahl.
Die Multiplikation von 2 52-Bit Zahlen auf der linken Seite ergibt aber potentiell eine 104-Bit Zahl. Da das Ergebnis um 52 Stellen nach rechts verschoben wird, kommt man mit 3 Registern aus, da die untersten 32 Bit natürlich sowieso wegfallen.

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

Re: Mantisse zu Ganzzahl machen

Beitrag von hm »

In der Aufgabenbeschreibung und auch in eueren Antworten ist immer die Rede vom Exponenten "e" und von "s" Stellen schieben. Wir haengen immer noch daran fest wie wir nun mit einer double-Eingabe weitermachen. binarysearch funktioniert bei uns fuer Ganzzahlen. Nur wie koennen wir das umbauen auf doubles?

Wenn ich die noetigen Anpassungen vom Aufgabenblatt einmal zusammenfasse (um den Ganzzahl-Algo zu erweitern), dann kommen wir auf folgende Schritte:
  • aufspalten in Mantisse und Exponent
  • Exponent checken ob ungerade
  • wenn ungerade => (Exponent) \(e = e - 1\) und Mantisse verdoppeln
  • Exponent halbieren \(e = \frac{e}{2}\)
  • Wurzel aus Mantisse mit binarysearch berechnen
    • linksshift um \(s\) Nachkommastellen, also Multiplikation mit \(2^s\)
    • \(2^s \cdot y = 2^s \cdot \sqrt{x} = \sqrt{2^{2s} \cdot x}\)
    • Berechnung der \(b_i\):
    • \(b_i = 1\), wenn \(2^s \cdot y_i \cdot ( 2^s \cdot y_i - 1 ) < 2^{2s} \cdot x\)
    • \(b_i = 0\), sonst
Woher bekommen wir \(s\)???
Wie spaltet man (z.B. $f0) in Mantisse und Exponent auf?

Wir stehen irgendwie total auf dem Schlauch... Waer klasse, wenn einer uns das mal etwas klarer machen koennte.
Quis custodiet ipsos custodes?
(Decimus Iunius Iuvenalis, Satirae VI)

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

Re: Mantisse zu Ganzzahl machen

Beitrag von ivoch »

Die Mantisse hat ja eine bestimmte Anzahl von Nachkommastellen. Um aus der Mantisse eine ganze Zahl zu machen, muss man sie um so viele Stellen nach rechts shiften, bis es keine Nachkommastellen mehr gibt. Diese Anzahl von Nachkommastellen ist eure "s".

Mantisse = 1,0011 -> s = 4 -> Ergebnis nach dem Shiften 10011.

[EDIT]Zu deiner anderen Frage - schau dir mal dieses Thema an.

Ulek
Neuling
Neuling
Beiträge: 9
Registriert: 25. Okt 2009 20:07

Re: Mantisse zu Ganzzahl machen

Beitrag von Ulek »

Seh ich es richtig, dass auf den floating point registern keine shiftoperationen ausgeführt werden können?

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

Re: Mantisse zu Ganzzahl machen

Beitrag von hm »

Ich wuesste zumindest nicht wie.

@ivoch: Ich dank Dir zwar vielmals fuer den Hinweis. Hatte den entsprechenden Thread auch schon gelesen. Steh trotzdem noch immer im tiefsten Wald und kann die Baeume immer noch nicht sehen... :?
Quis custodiet ipsos custodes?
(Decimus Iunius Iuvenalis, Satirae VI)

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

Re: Mantisse zu Ganzzahl machen

Beitrag von ivoch »

Ok, du hast eine binäre Zahl, z.B. 110111000. Daraus willst du die "Zahl" wissen, die aus Bits b4 und b5 besteht. Also 110111000, oder 11 in binär, oder 3 in Dezimal.. Wenn du die Zahl ein wenig nach Rechts shiftest, bekommst du dann 11011. Jetzt hast du aber immer noch keine 3 im Register, da die Bits, die jetzt an Position 3 und 4 stehen, Einsen sind (und dadurch die Zahl nicht den Wert 3 hat, sondern 27). Was passiert aber, wenn du "27 AND 3" in Binär ausführst?

Ich hoffe das hilft dir weiter, weil ich viel mehr nicht sagen kann, ohne die komplette Lösung zu verraten. :wink:

Es gibt auch andere Möglichkeiten, an diese zwei Bits ranzukommen (eine davon braucht z.B. nur Shift-, aber keine Logischen Operationen).

Ulek
Neuling
Neuling
Beiträge: 9
Registriert: 25. Okt 2009 20:07

Re: Mantisse zu Ganzzahl machen

Beitrag von Ulek »

Aber für diese ganzen shift und logik operationen funktionieren leider nicht auf den floating registern. Wie bekommen wir die Werte in die Integerregister geladen? Wir haben alle move befehle durchprobiert und sind zu keinem ergebnis gekommen.

Benutzeravatar
leviathan
Computerversteher
Computerversteher
Beiträge: 307
Registriert: 30. Jul 2008 14:26
Wohnort: Darmstadt
Kontaktdaten:

Re: Mantisse zu Ganzzahl machen

Beitrag von leviathan »

Ulek hat geschrieben:Aber für diese ganzen shift und logik operationen funktionieren leider nicht auf den floating registern. Wie bekommen wir die Werte in die Integerregister geladen? Wir haben alle move befehle durchprobiert und sind zu keinem ergebnis gekommen.
Hilfe des MARS anzuschauen bringt's. Der mfc1 Befehl ist was du suchst.
Ein Programmierer hat immer eine Lösung. Die passt nur nicht immer zum Problem.

Hiwi für Weiterentwicklung des Lernportals (Moodle).

Antworten

Zurück zu „Archiv“