Gewusst wie: pow(real, real) in x86

Ich bin auf der Suche nach der Umsetzung von pow(real, real) in x86-Assembly. Auch ich würde gerne verstehen, wie der Algorithmus funktioniert.

verwenden Sie x87 oder SSE?
glibc-Implementierung der pow() Funktion ist in sysdeps/ieee754/DZ-64/e_pow.c. Es verwendet einige integer-Prüfung der FP-bit-Muster, und einige FP multipliziert und addiert, aber nicht irgendwelche spezielle x87 Instruktionen. Für x86-64, es kompiliert wird, in __ieee754_pow_sse2() (mit diesem code das #include-es). Trotzdem, x87 ist nicht der beste Weg, es zu tun auf modernen CPUs.
Ich nehme an, glibc-code ist entweder genauer oder schneller als x87. Vielleicht beides, aber vielleicht nur genauer (richtig aufgerundet zur nächsten). Es muss nicht eine Schleife verwenden, obwohl, und single-stepping durch die Anweisungen, die gibt es nicht das für viele pow(1.175, 33.75). FYL2X ist ein sehr langsamer Befehl (~100 Zyklen) auf modernen CPUs, also sollte es nicht schwer sein Sie zu schlagen.

InformationsquelleAutor Maciej Ziarko | 2011-01-09

Schreibe einen Kommentar