P2: wie wurzel aus 52 bit mantisse

eesti
BASIC-Programmierer
BASIC-Programmierer
Beiträge: 116
Registriert: 6. Okt 2008 20:59
Wohnort: Darmstadt

P2: wie wurzel aus 52 bit mantisse

Beitrag von eesti »

Wir haben bis jetzt das Heronverfahren implementiert und das Wurzelziehen von Gleitkommazahlen. Da lesen wir allerdings nur ein Register aus und berechnen dann den Exponenten und die Wurzel der "abgeschnittenen" mantisse.
Müssen die Restwerte aus dem anderen register auch ausgelesen werden um ein noch genaueres ergebnis zu erhalten?
wenn ja, wie kann ich das machen. Denn das wird problematisch, da die gesamte Mantisse aus 52 bit besteht, aber nur 32 bit in ein register geschrieben werden können. :?:
Kann uns jemand weiter helfen?

Benutzeravatar
s!mon
Computerversteher
Computerversteher
Beiträge: 373
Registriert: 20. Okt 2007 18:24
Wohnort: Höchst i. Odw

Re: P2: wie wurzel aus 52 bit mantisse

Beitrag von s!mon »

Wenn du aus 52 Zeichen die Wurzel ziehst (+2 wegen dem 1, und weil du evtl deine Mantisseverdoppelst) bekommst du weniger als 32 Zeichen raus. Du kannst also das Ergebnis in einem Register speichern.

y*(y-1) < x kannst du überprüfen, in dem du die Multiplikation machst und den Überlauf in einem zweiten speicherst. Der Vergleich wird dann natürlich etwas schwerer..

Du kannst das auch noch genauer machen wenn du wie in der Aufgabe doppelt so weit shiftest aber das verkompliziert alles. Wir sind jetzt bei der Genauigkeit in einer Größenordnung von 10^-7 oder 10^-9 das sollte mal reichen.. bei extrem kleinen Zahlen wirds dann aber kritisch

eesti
BASIC-Programmierer
BASIC-Programmierer
Beiträge: 116
Registriert: 6. Okt 2008 20:59
Wohnort: Darmstadt

Re: P2: wie wurzel aus 52 bit mantisse

Beitrag von eesti »

ja, aber ich habe doch dann die mantisse in zwei verschiedenen t registern stehenda sie ja für eines zu lang ist, also zB $t2 und $t3, nachdem ich dne exponent rausgeshiftet habe und die mantisse evtl dem exponenten angepasst habe.
und davon muss ich dann die wurzel ziehen(also von den 52+2 )oder versteh ich das falsch?

Benutzeravatar
m_stoica
Kernelcompilierer
Kernelcompilierer
Beiträge: 473
Registriert: 5. Dez 2008 20:19
Wohnort: Zuhause

Re: P2: wie wurzel aus 52 bit mantisse

Beitrag von m_stoica »

jup. du brauchst 2 Register.

Du gehst erst die Bits des 1. Registers durch und wenn du ans Ende gekommen bist springst du an den Anfang des 2. Registers und gehst alle Bits durch

Benutzeravatar
misafir
Windoof-User
Windoof-User
Beiträge: 26
Registriert: 19. Okt 2008 05:13

Re: P2: wie wurzel aus 52 bit mantisse

Beitrag von misafir »

Könnte einer das eventuell genauer veranschaulichen?

Also die Mantisse + die implizite 1 befindet sich zum Teil ( Implizite 1 + die ersten 20 Mantissestellen = 21 ) im sagen wir mal $t0 register und die restlichen 32 Stellen befinden sich im $t1 register..
es heißt ja
y * ( y-1 ) < x => 1 sonst 0
nun, was ist x?

müssen wir den vergleich jeweils mit x=t0 und dann x=t1 machen?

sprich

2^25 * (2^25-1) < t0 ?
das ganze runter
dann bei 2^15 * (2 ^ 15 - 1) < t1?
oder wie sieht das aus ?

vielen dank schonmal für die antworten

Benutzeravatar
m_stoica
Kernelcompilierer
Kernelcompilierer
Beiträge: 473
Registriert: 5. Dez 2008 20:19
Wohnort: Zuhause

Re: P2: wie wurzel aus 52 bit mantisse

Beitrag von m_stoica »

x ist die Zahl aus der du die Wurzel ziehen willst. Die ist jetzt auf zwei register verteilt.
Um prüfen zu können ob ein "2-Register-Integer" kleiner als ein anderer ist, könntest du dir z.B. eine
eigene setLessThen-Prozedur schreiben. Das könnte man z.B so machen:
Wenn die ersten zwei Register gleich sind, wende ein slt auf die zweiten zwei Register an, ansonsten
wende slt auf die ersten zwei Register an

Antworten

Zurück zu „Archiv“