Kubikwurzel berechnen

Chrissicat

Mitglied
Servus!
wenn ich 27 eingebe, kommt richtigerweise 9 raus, aber bei 8 kommt 2,666 und bei 216 kommt 21,33 (oder so) raus.. sollte es eigentlich nicht?! :bahnhof:

Java:
    static double root3(double x) {
        double y0 = x / 3; 
        double y = 0;
        while (Math.abs(y0 - y) < 1.0E-12) { 
            y = y0;
            y0 = (2 * y + (x / (y * y))) / 3;
        }
    }

in meiner main methode wird einfach nur ein zahl vom benutzer eingelesen (double)

vielen dank im vorraus ;)
 

VfL_Freak

Top Contributor
Moin,

also eine kurze Suche bei Google brachte mir folgende Musterlösung :
Java:
// Compute the cubic root of x
static float root3(float x) 
{
    float y1 = x / 3;
    float y0 = 0;
    while( Math.abs(y0 - y1) > 1.0E-5 )   // <=== Vergleichswert !
    {
        y0 = y1;
	y1 = (2 * y0 + x / (y0 * y0)) / 3;  // <=== Klammerung !
    }
    return y1;
}

Und natürlich hat Landei Recht, denn 3*3*3 = 27 q.e.d. :D

Gruß
Klaus
 

Chrissicat

Mitglied
hey freak, ich hab mir wie du vielleicht gemerkt hast, diese mustervorlage als ähm mustervorlage genommen.. anscheinend falsch abgeschrieben.. :D
danke jedenfalls :toll:
 

Chrissicat

Mitglied
:) jaja, sicher! bei der aufgabenstellung stand, dass die methode ein double ist.. aber mit double hats nicht geklappt, mit float jedoch sehr wohl und ich wollte es nicht unbedingt ganz abschreiben.. ach mensch, hauptsache es klappt ;)
 

Landei

Top Contributor
Wenn schon, dann [c]Math.pow(x, 1.0/3.0);[/c], aber das weiß der TO bestimmt schon. [c]Math.exp(Math.log(x)/3);[/c] sollte auch funktionieren.
 

Chrissicat

Mitglied
hey!
ich glaub ich kann den thread schon schließen, mein fehler ist behoben :)
ich bin übrigens eine SIE ;) und das mit Math.*** kann ich nicht nehmen, muss ja selbst die methode schreiben :)
liebes landei, nein, das hab ich nicht gewusst, ich bin noch (!) anfänger :oops:
danke nochmal :toll:
 

Neue Themen


Oben