fonction de pow en C

J’écris un code C qui a une fonction d’alimentation qui provient de la bibliothèque math.h. quand j’ai compilé mon programme, j’ai reçu une erreur qui est “une référence indéfinie à la fonction ‘pow” “, je comstack mon programme en utilisant le compilateur gcc (fedora 9).

J’insère -lm flag dans gcc, l’erreur est omise mais la sortie de la fonction pow est 0.

#include main() { double a = 4, b = 2; b = pow(b,a); } 

Quelqu’un peut-il m’aider? Y at-il un problème dans mon compilateur?

Merci.

Votre programme ne génère rien.

Le 0 auquel vous faites référence est probablement le code de sortie, qui sera 0 si vous ne revenez pas explicitement de main .

Essayez de le remplacer par une signature conforme aux normes et renvoyez b :

 int main(void) { ... return b; } 

Notez que les valeurs de retour sont essentiellement limitées à 8 bits d’informations, donc très, très limitées.

Utilisez printf pour afficher la valeur.

 #include  ... printf("%f\n", b); ... 

Vous devez utiliser un spécificateur de conversion en virgule flottante ( f , g ou e ) pour imprimer double valeurs double . Vous ne pouvez pas utiliser d ou autres et vous attendre à une sortie cohérente. (Ce serait en fait un comportement indéfini.)

Pour tous les autres qui cherchent une telle réponse:

Cela ne fonctionnera pas :

 gcc my_program.c -o my_program 

Cela produira quelque chose comme ceci:

 /tmp/cc8li91s.o: In function `main': my_program.c:(.text+0x2d): undefined reference to `pow' collect2: ld returned 1 exit status 

Cela fonctionnera :

 gcc my_program.c -o my_program -lm 

Il vous manque la ligne printf pour imprimer la valeur sur stdout. Essaye celui-là:

 #include  #include  int main() { double a=4, b=2, c; c = pow(b,a); printf("%g^%g=%g\n", a,b,c); return 0; } 

La sortie sera:

 4^2=16 

Il y a confusion ici concernant la base et l’exposant. Cela n’apparaît pas immédiatement car 2 ^ 4 et 4 ^ 2 sont égaux à 16.

 void powQuestion() { double a, b, c; a = 4.0; b = 2.0; c = pow(b, a); printf("%g ^ %g = %g\n", a,b,c); // Output: 4 ^ 2 = 16 a = 9.0; b = 2.0; c = pow(b, a); printf("%g ^ %g = %g\n", a,b,c); // Output: 9 ^ 2 = 512 >> Wrong result; 512 should be 81 << // K & R, Second Edition, Fifty Second Printing, p 251: pow(x,y) x to the y double x, y, p; x = 9.0; y = 2.0; p = pow(x, y); printf("%g ^ %g = %g\n", x, y, p); // Output: 9 ^ 2 = 81 // even more explicitly double base, exponent, power; base = 9.0; exponent = 2.0; power = pow(base, exponent); printf("%g ^ %g = %g\n", base, exponent, power); // Output: 9 ^ 2 = 81 }