Finden der Quadratwurzel einer gegebenen Zahl bitweise Operationen
Gibt es einen Algorithmus zum finden der Quadratwurzel einer gegebenen Zahl bitweise Operationen?
- Wahrscheinlich meinst du dies: "gibt es einen Algorithmus zum finden der Quadratwurzel einer gegebenen Zahl bitweise Operationen"?
- versuchen Sie, auf diese Seite schauen - azillionmonkeys.com/qed/sqroot.html#implementations
- ja ich brauche den Algorithmus für das finden der Quadratwurzel bitweise Operationen
- Sind Sie interessiert an einer integer square root"? oder eine, bei der floating-point?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Es ist dieses berühmte Stück von magic code berechnet, dass inverse Quadratwurzel mit ein paar sehr clever bit twiddling. Es ist Unrecht zugeschrieben John Carmack - hier ist ein tiefer Graben in seinem Ursprung. Vielleicht ist das, was du fragst nach?
Ich würde nicht empfehlen, es zu verwenden, obwohl. Auf modernen CPU ' s kann es nicht schlagen gewidmet, Transzendentalen Anweisungen. Ihre üblichen c++ intrinsische
sqrt()
würde wahrscheinlich schlagen Sie die Hände nach unten.[Edit:] Der zitierte Artikel beschreibt eine Allgemeine Ableitung-Methode für solche schnellen Annäherungen, und ausdrücklich erklärt, 'Leiten Sie eine ähnliche Methode für die sqrt(x)' als ein Hausaufgaben problem bei der letzten Zeilen. So sollten Sie in der Lage sein zu verfolgen, sein denken und entwickeln eine ähnliche Methode für die sqrt (ohne Gegenseitigkeit) direkt.
Wikipedia hat einen Artikel über und einen code zu. Und ein weiterer wikipedia-Artikel zeigt einen Algorithmus (auch für Wurzeln, die größer als 2) kann leicht implementiert werden Binär (also mit Betrieb auf-bits).
Wenn Sie halten wollen, nur real bit-Operatoren, die Sie implementieren müssen, um
+
mit Ands, Ors, Xors und Nots... Wenn Sie wollen, es zu tun auf Schwimmern nach IEEE, müssen Sie mehr arbeiten (der erste code, der in der wikipedia verwendet werden könnte, auf die Mantisse "direkt", wahrscheinlich unter gewissen Beschränkung, und stellen exponent "dementsprechend"... Sie haben, um herauszufinden, wie, jedoch auch!)Nein... ich gehe davon aus, dass es aus performance-Gründen? Wenn ja, am besten sind Sie wahrscheinlich zu bekommen, ist mit Hilfe einer lookup-Tabelle. Wenn du die Möglichkeit hast zur Arbeit mit integer-math " (ex. durch die Arbeit mit zahlen multipliziert mit 10, 100 oder 1000 anstelle von floats), die Sie verwenden können bitweise rotation zu schnell, werfen Sie nicht benötigte Präzision und springen Sie in einer lookup-Tabelle.