Wie sqrt implementieren?



  • Hallo,
    ich arbeite mit einem Compiler für einen Microcontroller in dem math.h nicht implementiert ist, und ich muss Wurzeln berechnen, folglich eine Funktion sqrt selbst implementieren. Hat jemand eine Idee oder kennt sich aus?
    Danke, Martin



  • wie waers so?

    x = 123.4;
    guess = 1;
    epsilon = x/10000; // genauigkeit
    while (fabs(guess*guess - x) > epsilon) // schaetzung gut genug?
    {
        guess = (guess + x/guess) / 2.0; // ...scheinbar nicht, also schaetzung verbessern
    }
    

    wenn ein prozessor/controller eine floating point division instruktion kennt, benutze inline assembler (compilerabhaengig).

    edit: ein fabs() hat gefehlt. hab gleich den algorithmus etwas ausgeschmueckt
    dieser algorithmus nennt sich "Babylonisches Wurzelziehen, oft auch Heron-Verfahren"



  • Vielen Dank, die Lösung find ich spitze!


Anmelden zum Antworten