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


von Manni (Gast)


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.

von Helmut L. (helmi1)


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

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

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

von Mandrake (Gast)


Lesenswert?

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

Gruß

Mandrake

von Manni (Gast)


Lesenswert?

hmm aber mit dem beispiel von ti kann niemand was anfangen?

von Manni (Gast)


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

von Karl H. (kbuchegg)


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.

von ev so? (Gast)


Lesenswert?

Jürg Müller Software–Art GmbH/Zurich

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

in Zürich sprechen sie sogar Deutsch!

von ev so? (Gast)


Lesenswert?

http://www.diaware.de/html/wurzel.html

ev. erklärt das das Minus...

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.