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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.