Forum: Projekte & Code C-code sqrt wurzelberechnung für MSP430


von Tim R. (mugen)


Angehängte Dateien:

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.

von Detlef _. (detlef_a)


Lesenswert?

Yo, man muß das Rad auch nicht immer wieder neu posten, der Code ist dem 
Integerwurzelliebhaber bekannt, den hatte ich hier 
Beitrag "square root and cubic root for integer and FPGA implementation"
schon mal vorgestellt und der stammt aus der englischen Wikipedia 
http://en.wikipedia.org/wiki/Methods_of_computing_square_roots

Cheers
Detlef

von Tim R. (mugen)


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).

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.