Hi,
ich kann dein Problem nicht nachvollziehen:
int main ( int argc, char* argv[] ){
double base = 27.0;
double exp = 1.0/3;
double result= 0.0;
printf("%f^%f=%f\n",base,exp,result);
if( (argc>2) ) {
base=atof(argv[1]);
exp =atof(argv[2]);
}
result=pow(base,exp);
printf("%f^%f=%f\n",base,exp,result);
return 0;
}
ergibt bei mir:
./testPowDouble 56623104 0.33333333333
27.000000^0.333333=3.000000
56623104.000000^0.333333=384.000000
@ Alle
Wenn ihr Variablen
hartcodiert mit Inhalten füllt, ist die Chance sehr hoch dass der Compiler optimiert und das Ergebnis nicht wirklich repräsentativ ist.
@for_mat_C
Vermutlich compiliert dein Quellcode auch ohne
-lm, oder?
Dein
zahl1 =(double) 1/3; funktioniert bei mir so auch nicht, ein
zahl1 =1.0/3; sollte helfen. (Mach mal printf-Ausgaben, dann merkst du es...)
@SiD
Gewöhne dir bitte an, gleich vernünftige Namen für Variablen, Funktionen usw. zu vergeben.
Nicht vergessen double sind bis 16 Stellen genau, ab dann wird gelogen dass es nur so kracht.
SiD könnte auch die Zahlen nach der Berechnung in integer umwandeln und die Rechnung rückwärts durchführen und so eine Kontrolle realisieren. Natürlich mit einer eigenen pow-Funktion: int sidsPow (int base, int exp)
cu