Wurzeln schnell ziehen
-
Sowohl 3DNow als auch SSE benutzen im CPU integrierte Tabellen mit approximierten Ergebnissen um die Werte zu generieren. Bei 3DNow sind es afaik 14 Bits an Präzision, die man so bekommt. Das ist nicht gerade viel und AMD empfiehlt deshalb auch mit einer Newton-Raphson Iteration das Ergebnis zu verbessern. Intel weist darauf auch an verschiedenen Stellen in seinen Dokumentationen hin.
14 Bit sind nicht gerade viel und das kann zu derben Fehlern in der Darstellung führen.cya
liquid
-
LiquidAcid schrieb:
14 Bit sind nicht gerade viel und das kann zu derben Fehlern in der Darstellung führen.
ist bei mir bis jetzt noch nie aufgefallen. die genauigkeit müsste aber trotzdem über der von InvSqrt liegen.
-
Afaik liegen sie in etwa auf demselben Level.
cya
liquid
-
hab mal ein paar tests gemacht und InvSqrt ist wirklich die mit abstand unpräziseste, gefolgt von 3dnow. geschwindikeits/präzisionsverhältniss ist wohl die beste wahl Sqrt2.
gruss
adapto
-
p.s: bei SqrtSSE gab es keine abweichungen zu sqrt.
-
Die haben ungefähr dieselben Tests gemacht, aber Abweichungen bei der Verwendung von SSE gefunden.
cya
liquid
-
Passt aber auf, das ihr euch nicht veroptimiert.
Bye, TGGC \-/
-
Wenn man kein D3DX hat muss man halt selber Hand anlegen.
cya
liquidEDIT: Ahja, was ich noch sagen wollte. Hier im Thread gibt es einige Verwechslung was rsprt und sqrt angeht. Der Code der Carmack angedichtet wird berechnet die reziproke Quadratwurzel. Was hier einige machen ist einfach nur die Quadratwurzel berechnen.
-
InvSqrt(x)*x
-
=Sqrt(x)
ich weiß
-
naja wenn ihr die letzte code-zeile von InvSqrt oefters ausfuehrt, wird auch das ergebnis genauer aber die performance geht in den keller!
// z.b. 3 iterationen x = x*(1.5f - xhalf*x*x); x = x*(1.5f - xhalf*x*x); x = x*(1.5f - xhalf*x*x);
fuer alle die wissen wollen warum das so funktioniert sei folgendes paper empfohlen:
http://www.math.purdue.edu/~clomont/Math/Papers/2003/InvSqrt.pdf
-
Wow, du hast einen über ein Jahr alten Beitrag wieder ausgegraben