Dritte Wurzel ziehen funktioniert nicht



  • Hallo zussammen,
    Bin ein C++ Anfänger und schaffe es nicht die 3. Wurzel einer Zahl zu ziehen, sollte ja mit hoch 1/3 funktionieren allerdings kommt dabei immer nur 1 heraus, hab ich einen blöden Tippfehler oder gar einen groben Denkfehler 😕

    ---------
    #include <iostream>
    #include <cmath>
    using namespace std;

    int main ()
    {
    float a = 27, b;
    b = pow(a , (1/3) );
    cout << "b= " << b;
    }
    ----------

    http://up.picr.de/25234790da.jpg



  • Was ist denn 1/3? Vermutlicht nicht das, was Du denkst.



  • int/int = int



  • Ich habe gelesen dass es für die 2. Wurzel eine Funktion [sqrt] gibt,es aber für die 3. Wurzel oder höheres keinen direkten Befehl gibt, deswegen pow [Befehl für hoch ? ] also 27^(1/3) = 3 sowie 3.Wurzel aus 27 = 3 😋



  • Wie SG1 schon sagte, dein (mathematischer) Denkansatz ist richtig.

    Aber bei 1/3 ist die 1 ein int für den Compiler und die 3 auch. Daher macht der da eine Integer Division 1/3 = 0 (theoretisch Rest 1, aber das juckt niemanden) und daher rechnest du da 27^0.



  • Ixion schrieb:

    Ich habe gelesen dass es für die 2. Wurzel eine Funktion [sqrt] gibt,es aber für die 3. Wurzel oder höheres keinen direkten Befehl gibt, deswegen pow [Befehl für hoch ? ] also 27^(1/3) = 3 sowie 3.Wurzel aus 27 = 3 😋

    Seit C++11 gibt es cbrt
    (bei C seit C99)

    http://en.cppreference.com/w/cpp/numeric/math/cbrt

    Aber dein eigentliches Problem (die Integerdivision) wird dir noch häufiger Probleme machen, wenn du den Hintergrund dazu nicht kennst.



  • Oh okey,
    und wie sag ich dem pc er soll eine float (?) division machen bzw wie muss ich das schreiben damit s richtig ist ?

    übrigens danke für die schnellen Antworten.



  • Floatliterale verwenden: 1.0f/3.0f



  • Es reicht, wenn ein Teil der Division eine Fließkommazahl ist.

    1.0/3.0
    1.0/3
    1/3.0
    1./3
    

    Wenn du zwei Integervariablen hast, musst du (mindestens) eine in ein float (besser double ) casten.



  • Muss noch n haufen lernen 🙄

    aber dankeschön, hat jetzt funktioniert

    #include <iostream>
    #include <cmath>
    using namespace std;

    int main ()
    {
    float a = 27, b;
    b = pow(a , (1./3) );
    cout << "b= " << b;
    }



  • Noch eine kleine Anmerkung zu cbrt und pow:

    http://en.cppreference.com/w/cpp/numeric/math/cbrt schrieb:

    std::cbrt(arg) is not equivalent to std::pow(arg, 1.0/3) because std::pow cannot raise a negative base to a fractional exponent.


Log in to reply