C-code sqrt wurzelberechnung für MSP430

OP #2840714
Lesenswert?

Für den MSP430G2553 habe ich leider keinen schnellen Assembler-Code 
gefunden um die Wurzel schnell zu berechnen. Hier im Forum habe ich zwar 
einige c-codes gefunden, allerdings waren diese meist sehr langsam. 
Stellenweise sogar über 5000 Taktzyklen.

Auf der Webseite

http://www.codecodex.com/wiki/Calculate_an_integer_square_root

habe ich einen passenden und schnellen c-code gefunden (ca. 420 clocks). 
Die Zahlen bis 2^20 habe ich geprüft. Diese Routine rundet immer ab, 
also aus 5,9 wird 5.
1
unsigned int isqrt32 (unsigned long int n) // OR isqrt16 ( uint16 n ) OR  isqrt8 ( uint8 n ) - respectively [ OR overloaded as isqrt (uint?? n) in C++ ]
2
{
3
    register long unsigned int  // OR register uint16 OR register uint8 - respectively
4
        root, remainder, place;
5

6
    root = 0;
7
    remainder = n;
8
    place = 0x40000000; // OR place = 0x4000; OR place = 0x40; - respectively
9

10
    while (place > remainder)
11
        place = place >> 2;
12
    while (place)
13
    {
14
        if (remainder >= root + place)
15
        {
16
            remainder = remainder - root - place;
17
            root = root + (place << 1);
18
        }
19
        root = root >> 1;
20
        place = place >> 2;
21
    }
22
    return root;
23
}

Diese Beitrag ist eigentlich nur für die Suche, man muss ja nicht immer 
mehrmals das Rad neu erfinden.
Angehängte Dateien:
OP #2841747
Lesenswert?

Hi, den code habe ich allerdings hier noch nicht gesehen und auch keine 
Angaben über die Anzahl der clocks. Ich hätte natürlich auch einen 
weiteren Thread für eine weitere Wurzel-Frage erstellen können. 
Stattdessen habe ich versucht das Internet zu druchforsten.
Warum wird man in diesem Forum immer so schnell kritisiert?

@Detlef
Diese Art von Antworten werden meist als unhöflich angenommen. Ich 
respektiere deine Arbeiten in diesem Bereich, das steht außer Frage, 
aber die Art zu Antworten geht auch besser (Dabei meine ich eigentlich 
nur den ersten Satz).

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren