So meine Quadratwurzel ist fertig.
Hab mir ein Iteratives VErfahren ausgedacht, dass nach dem Prinzip der Annäherung durch Intervallhalbierung funktioniert.
dadurch konnte ich folgende verbesserung erziehlen:
400000/232000 Berechnung der Gelenkwinkel IK (72% schneller)
hat jemand von euch eine Idee wie man die Arkus Winkelfunktionen Approximieren kann? In Festkomma Arithmetik...
Code:
uint16_t sqroot(unsigned long number) // O(n)=log_2(n) Max Abweichung meistens 0 oder 1, selten 2 bzw. 0.1% für große zahlen
{
if(number==0) return 0; //triviale Fälle abfangen
if(number==1) return 1;
unsigned long r2;
uint16_t root=0,delta;
if(number>16777216UL) //falls die Zahl größer als eine 24 Bit Zahl ist
delta=(number>>16);
else if(number>64536) //falls die Zahl größer als eine 16 Bit Zahl ist
delta=(number>>8); //günstigeren Anfangspunkt Wählen --> führt zu leichter Unschärfe 0.1%
else
delta=(number>>1); //sonst beginn bei der Zahl selbst
while (delta) //sollte innerhalb von 16 Iterationen eine Lösung liefern
{
r2=(unsigned long)root*root;
if(r2>number)
root-=delta;
else
root+=delta;
delta=(delta>>1);
}
return (uint16_t)root;
}
mfg WarChild
Lesezeichen