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;
}
----------
-
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
(besserdouble
) 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.