www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik wurzelziehen aus 32-bit int mit msp430 in C


Autor: Manni (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Moin,

ich hab einen msp430f5438.

Nun wuerde ich gerne moeglichst schnell die wurzel aus einer 32 bit zahl 
ziehen. Weiss da einer ne Lösung? Programmiersprache ist C.

Ich hab Beispielcode(http://www.ti.com/sc/data/msp/databook/chp5.pdf) 
gefunden aber ich verstehe Ihn nicht so ganz:


{ unsigned long y, h;
int i;
h = x;
x = y = 0;
for (i = 0; i < 32; i++)
{ // x ist eigentlich 2*x
x <<= 1; x++; // 4*x + 1
if (y < x)
{
x –= 2;
} else
y –= x;
x++;
y <<= 1; // <y, h> <<= 2
if (h & Minus) y++;
h <<= 1;
y <<= 1;
if (h & Minus) y++;
h <<= 1;
}
return x;
}

Mehr war da nicht angegeben. Wie es genau Funktioniert möchte ich gar 
nicht wissen (jetzt vom mathematischen her).
Aber welchen Wert Übergebe ich der Funktion und was ist "Minus". Minus 
ist nirgends deklariert.

Autor: Helmut Lenzen (helmi1)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
#include <math.h>
/**********************************************************************
*
*  long  Sqrtlong(long il)
*  Wurzelziehen
*
**********************************************************************/


long  Sqrtlong(long il)
{
  long  x1,x2;

  x1 = 1L;
  x2 = 0L;

  if(il == 0L) return(0L);

  do
  {
    x2 = x1;
    x1 = (x1 + il/x1);
    x1 = x1 >> 1;
  } while(labs(x1-x2)>1L);
  return(x1);
}


Hiermal meine Routine fuer das Wurzelziehen.

Gruss Helmi

Autor: Läubi .. (laeubi) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Beitrag "[ASM] (schnelle) Integer Wurzel 32bit" weiter unten gibt es 
C-Code...

Autor: Mandrake (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ein einfaches Verfahren, dass auch schnelle konvergiert ist das sog.
Heron Verfahren. Zudem ist es noch recht einfach zu implementieren.

Gruß

Mandrake

Autor: Manni (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hmm aber mit dem beispiel von ti kann niemand was anfangen?

Autor: Manni (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also ich gehe davon aus, dass x an die funktion Übergeben wird bzw. die 
Zahl ist, aus der die Wurzel berechnet werden soll. Aber was macht 
Minus. Dem Namen nach anscheinend irgendwas vorzeichenmäßiges

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Manni schrieb:
> Also ich gehe davon aus, dass x an die funktion Übergeben wird bzw. die
> Zahl ist, aus der die Wurzel berechnet werden soll. Aber was macht
> Minus. Dem Namen nach anscheinend irgendwas vorzeichenmäßiges

Ich schätze mal, das da noch eine Funktion vorgeschaltet wurde, die 
abfängt wenn eine negative Zahl übergeben wird und dieses in 'Minus' 
speichert. Auch wenn die Wurzel auf negative Zahlen eigentlich so nicht 
definiert ist.

Autor: ev so? (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Jürg Müller Software–Art GmbH/Zurich

Frag doch mal den Herrn J. Müller ;-)

in Zürich sprechen sie sogar Deutsch!

Autor: ev so? (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
http://www.diaware.de/html/wurzel.html

ev. erklärt das das Minus...

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.