n-te Wurzel



  • Ich glaub dir dass das obenstehende Wurzel 2 ist.
    Gib bei dir einfach mal pow(-0,19,(1.0/3.0)) ein und schau ob und was er ausspuckt



  • printf("%lf"
    

    ist undefinertes Verhalten.



  • Wutz schrieb:

    printf("%lf"
    

    ist undefinertes Verhalten.

    Sieht ganz so aus.

    Warum ist das so?
    Weil etwaige float-Argumente für printf() sowieso zu double's promoted werden.



  • Mister004 schrieb:

    Gib bei dir einfach mal pow(-0,19,(1.0/3.0)) ein und schau ob und was er ausspuckt

    Kein Wunder, da soll pow() ja auch mit 3 Argumenten aufgerufen werden. pow() will aber nur 2 Argumente.


  • Mod

    Du merkst dir das Vorzeichen, ziehst die dritte Wurzel aus dem Betrag, stellst das Vorzeichen wieder vor das Ergebnis.



  • Zweite Fundstelle für math.h

    double pow(double x, double y);	// x[h]y[/h]. Ein Argumentfehler liegt vor bei x=0 und y<0, oder bei x<0 und y ist nicht ganzzahlig.
    

    Du kannst ja die Wurzel aus dem Absolutwert nehmen. Wenn der Wert < 0, muss die 3. Wurzel auch < 0 sein


  • Mod

    ⚠ Und noch was wichtiges: In C99 gibt es cbrt , das rechnet die dritte Wurzel korrekt aus.



  • Mister004 schrieb:

    Hier die Zeile die Probleme macht:
    v=pow((-q/2.0)-sqrt(D),(1.0/3.0));
    wobei q=0 und D=1/27

    Die Wurzel aus negativen Zahlen ist mathematisch nicht definiert. Ich vermute aber, dass hier die reelle der drei Wurzeln gemeint ist, d.h. im Grunde erweitert man die Definition auf $$\sqrt[3]{x} = -\sqrt[3]{-x}$$ für x < 0.



  • @SeppJ

    danke für den tollen Tipp mit cbrt() den hab ich bisher noch in keinem anderen forum gelesen. Jetzt funktionert der Teil endlich

    und danke auch an alle andere für die schnelle Hilfe



  • da ich hier schon unter Profis bin hätte ich noch eine Frage:

    wieso bekomme ich hier immer ein falsches Ergebnis:
    y2=2*sqrt((p/3)*(-1))*cos((phi/3)+((120.0*360.0)/(2.0pi)));
    y3=2*sqrt((p/3)*(-1))*cos((phi/3)+((240.0*360.0)/(2.0
    pi)));

    bei p=-1/3, phi=3.1415(pi) und pi ist mit 3.14159265 definiert

    es sollte rauskommen:
    y2=-2/3=-0,6666
    y3=-1/3=-0,3333

    und das kommt bei mir raus:
    y2=-0,61
    y3=-0,18

    ich hab herausgefunden das der fehler irgendwo beim cos liegen muss aber was mache ich flasch?



  • Wenn *360.0)/(2.0*pi) eine Umrechnung von Grad zu Bogenmaß sein soll, dann meinst du wohl das:

    y2=2*sqrt(-p/3)*cos(phi/3 + 120.0*pi/180);
    y3=2*sqrt(-p/3)*cos(phi/3 + 240.0*pi/180);
    

Anmelden zum Antworten