wurzelziehen aus 32-bit int mit msp430 in C

Gast #1362833
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.
#1362853
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
Gast #1363226
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
#1363234
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.

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