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?
Mantisse zu Ganzzahl machen
Re: Mantisse zu Ganzzahl machen
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.
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.
Re: Mantisse zu Ganzzahl machen
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:
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.
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
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)
(Decimus Iunius Iuvenalis, Satirae VI)
Re: Mantisse zu Ganzzahl machen
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.
Mantisse = 1,0011 -> s = 4 -> Ergebnis nach dem Shiften 10011.
[EDIT]Zu deiner anderen Frage - schau dir mal dieses Thema an.
Re: Mantisse zu Ganzzahl machen
Seh ich es richtig, dass auf den floating point registern keine shiftoperationen ausgeführt werden können?
Re: Mantisse zu Ganzzahl machen
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...
@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)
(Decimus Iunius Iuvenalis, Satirae VI)
Re: Mantisse zu Ganzzahl machen
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.
Es gibt auch andere Möglichkeiten, an diese zwei Bits ranzukommen (eine davon braucht z.B. nur Shift-, aber keine Logischen Operationen).
Ich hoffe das hilft dir weiter, weil ich viel mehr nicht sagen kann, ohne die komplette Lösung zu verraten.

Es gibt auch andere Möglichkeiten, an diese zwei Bits ranzukommen (eine davon braucht z.B. nur Shift-, aber keine Logischen Operationen).
Re: Mantisse zu Ganzzahl machen
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.
- leviathan
- Computerversteher
- Beiträge: 307
- Registriert: 30. Jul 2008 14:26
- Wohnort: Darmstadt
- Kontaktdaten:
Re: Mantisse zu Ganzzahl machen
Hilfe des MARS anzuschauen bringt's. Der mfc1 Befehl ist was du suchst.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.
Ein Programmierer hat immer eine Lösung. Die passt nur nicht immer zum Problem.
Hiwi für Weiterentwicklung des Lernportals (Moodle).
Hiwi für Weiterentwicklung des Lernportals (Moodle).