Funktion pow
-
Hallo zusammen!
Ich weiss nicht mehr weiter. Ich versuche seit 2 Tagen folgendes Problem in den Griff zu bekommen:
Ich versuche die Funktion pow(x,y) aus dem package math.h zu benutzen. Das klappt jedoch nur teilweise. Wenn ich folgendes Progamm kompiliere, habe ich keine Probleme:#include <stdio.h> #include <stdlib.h> #include <math.h> #include <unistd.h> int main () { double k_B = 1.380 * pow(10,-23); printf ("32.01 ^ 1.54 = %lf\n",k_B * pow(10,23)); }Wenn ich es dann allerdings in mein Programm einbauem, bekomme ich folgende Fehlermeldung (benutze g++)
random.h:18: error: call of overloaded `pow(int, int)' is ambiguous
/usr/include/bits/mathcalls.h:154: note: candidates are: double pow(double, double)
/usr/lib/gcc/i386-redhat-linux/3.4.6/../../../../include/c++/3.4.6/cmath:361: note: long double std::pow(long double, int)
/usr/lib/gcc/i386-redhat-linux/3.4.6/../../../../include/c++/3.4.6/cmath:357: note: float std::pow(float, int)
/usr/lib/gcc/i386-redhat-linux/3.4.6/../../../../include/c++/3.4.6/cmath:353: note: double std::pow(double, int)
/usr/lib/gcc/i386-redhat-linux/3.4.6/../../../../include/c++/3.4.6/cmath:349: note: long double std::pow(long double, long double)
/usr/lib/gcc/i386-redhat-linux/3.4.6/../../../../include/c++/3.4.6/cmath:345: note: float std::pow(float, float)Waere super, wenn mir jemand helfen koennte. Ich bin nicht allzu erfahren mit C++. Es kann also auch eine kleine Dummheit sein

vielen Dank schon mal
Lagrange
-
Meines Wissen unterstützt die pow()-Funktion keine zwei Integer als Übergabeparameter. Compile doch mal mit GCC und der Option "-xc++" oder direkt mit dem G++ Compiler, vielleicht hilft das was.
-
PuerNoctis_off schrieb:
Meines Wissen unterstützt die pow()-Funktion keine zwei Integer als Übergabeparameter. Compile doch mal mit GCC und der Option "-xc++" oder direkt mit dem G++ Compiler, vielleicht hilft das was.
Soll heißen "Meines Wissen unterstützt die pow()-Funktion in reinem C keine zwei Integer als Übergabeparameter."
Sry, für den kleinen Fehler...
-
Aber das komische ist ja, dass es funktioniert, wenn ich das angegebene Program unter linux wie folgt kompiliere:
g++ Test.cpp -g -o Test
EDIT:
Oh ich benutze schon den c++ Kompiler g++
-
du könntest double werte nehmen bzw casten
also:double test = pow(3.0, 5.0); int a = 2, b = 3; printf("%u", pow(double(a), double(b)));wobei ich mir auch nicht sicher bin ob pow im std namespace liegt
sollte aber nicht sein...
-
@PuerNoctis_off
Irgendwie hast du aber recht. Wenn ich es pow(2,0.3) gehts. Sehr komisch. Wer sich das wieder ausgedacht hat

-
Hmmm....verwende mal statt der <math.h> die <cmath>.
Geht das?
-
ne das geht auch nicht. Allerdings wenn ich einfach an den exponenten ein .0 anhaenge geht es. Vielen Dank Jungs!! Das nenne ich mal eine schnelle Hilfe. Auch wenn ich nicht verstehe, warum er da keine integer mag und vorallem warum es funktioniert, wenn man nur
#include <stdio.h> #include <stdlib.h> #include <math.h> #include <unistd.h> int main () { double k_B = 1.380 * pow(10,-23); printf ("32.01 ^ 1.54 = %lf\n",k_B * pow(10,23)); }hat. Egal - es klappt

-
...ansonsten den Ansatz von Skym0sh0 nehmen, denke ich. Also explizit casten. Falls Du dann aber öfter potentieren musst, würde ich empfehlen selbst die pow() zu überladen:
double pow(int base, int exponend) { return pow(double(base), double(exponend)); }
-
Lagrange schrieb:
...
Aber mal etwas anderes, warum fragst du das nicht im C-Forum?
Dein Code ist jedenfalls kein C++, daher hier verkehrt (Könnte ein Moderator es mal verschieben?)cu André
P.S: Das man einen C++ Compiler benutzt bedeutet in Hinblick auf den Code auch nicht viel.
-
ne, muss ich nicht. Ist nur fuer ein paar Konstanten am Anfang vom Program.