Absolutbetrag bestimmen



  • Ich muss eine FUnktion für den Absoultibetrag schreiben und hab mir folgendes überlegt:

    int main(){
    
        float a, x, eq;
        int i=0;
    
      a=a*a; // von a soll der betrag bestimmt wwerden
      x=a;
                  eq = 0.5*( x + a / x );
    
        while(eq - x > 1/1000000 || i <= 30){
                 x = eq;
                 i++;
                 eq = 0.5*( x + a / x );
    }
    cout << x;
    }
    

    geht das auch schneller? Ich verwende den Heron-Algoirithmus füpr Wurzel aus a²



  • mit JAAVA geht das schneller



  • oder soll ich lieber die 4. wurzel nehmen, weil da das newtonverfahren schneller konvergiert, und dann nochmal quadrieren (multiplikationen sind ja billig)?



  • Willst du wirklich nur den Betrag?
    Dann mach doch einfach:

    float fabs( float val )
    {
      return val < 0 ? -val : val;
    }
    


  • was jetzt? Absolutbetrag oder Quadratwurzel?



  • zwutz schrieb:

    was jetzt? Absolutbetrag oder Quadratwurzel?

    Absolutbetrag via Quadratwurzel(x²) oder halt 4.Qurzel(x²)^2



  • wand0r schrieb:

    zwutz schrieb:

    was jetzt? Absolutbetrag oder Quadratwurzel?

    Absolutbetrag via Quadratwurzel(x²) oder halt 4.Qurzel(x²)^2

    Das Heron-Verfahren konvergiert bereits quadratisch, das ist eigentlich schon ganz nett, aber man kann es in der Praxis nur in bestimmten Situationen beobachten.
    Was du brauchst ist ein guter Startwert, wenn er gut ist, dann konvergiert das Verfahren auch ziemlich schnell. Das finden eines guten Startwertes ist allerdings eine Wissenschaft für sich.
    Mir scheint es als würdest du das eh nur zum Spaß machen, dann kannst du das auch einfach so lassen.

    Ansonsten schau dir mal dieses paper an, ganz unten findest du eine fertige C-Funktion welche dir eine schnell berechnete Näherung für die Quadratwurzel liefert, kannst ja mal schauen ob sich mit dieser Näherung als Startwert das Verfahren schneller konvergiert.
    Aber lies vorher mal den Artikel durch ich weiß nicht genau wie die Zahl in dem unsigned int gespeichert wird.



  • OMG, ihr seid ja total auf den Troll reingefallen.

    Hallo?

    Er will den Betrag bestimmen und benutzt dazu Quadrieren und Wurzelziehen und das auch noch mit nem eigenen Algorithmus statt mit sqrt!

    OFFENSICHTLICH EIN TROLL!!!

    wenn nicht:

    betrag = a > 0 ? a : -a;


Anmelden zum Antworten