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 }