El uso de la función pow () arroja un error de referencia indefinido en C
⏰ 2 minutos de lectura
elíseo devorado
¿Por qué el siguiente fragmento de código funciona en C:
int res = pow(2, 3);
printf("%d\n", res);
mientras que este otro no?
int a = 2;
int b = 3;
int res = pow(a, b);
printf("%d\n", res);
Incluso si lo intento
double a = 2;
double b = 3;
double res = pow(a, b);
printf("%f\n", res);
obtengo un
referencia indefinida a ‘pow’
¿Qué estoy haciendo mal?
Un fragmento de código completo sería útil…
–Oliver Charlesworth
13 de noviembre de 2010 a las 18:37
¿Estás incluyendo math.h o no?
–Pete Kirkham
13 de noviembre de 2010 a las 18:37
Estoy incluyendo matemáticas.h, sí. El primer fragmento de código funciona y genera lo que se esperaba. Los otros dos dan la “referencia indefinida a ‘pow'”.
– elíseo devorado
13 de noviembre de 2010 a las 18:38
¿Está vinculando la biblioteca matemática al proporcionar el cambio -lm a gcc/g++?
– swatkat
13 de noviembre de 2010 a las 18:42
En su tercer fragmento de código, los valores dobles deben tener un .0 después de ellos. Entonces, double a = 2.0;no double a = 2;.
–Mateen Ulhaq
13 de noviembre de 2010 a las 20:37
Cuando funciona, es porque el compilador mismo realizó el cálculo (y se incluyó en el binario como si lo hubiera escrito)
printf("8\n");
Cuando no funciona es porque el pow La función está incluida en la biblioteca de matemáticas y la biblioteca de matemáticas no está vinculada con su binario de forma predeterminada.
Para vincular la biblioteca matemática, si su compilador es gcc, use
gcc ... -lm ...
Con otros compiladores, debería ser lo mismo 🙂
pero lee la documentacion
MPFR! ¡Guau! 🙂 Totalmente noqueado cuando estaba intentando exactamente lo mismo y no puedo creer lo que he visto.
– Deqing
26 de agosto de 2014 a las 9:05
undefined reference to 'pow' suena como un error del enlazador. No está vinculando en la biblioteca de matemáticas, incluso si introduce la función pow incluyendo <math.h>.
Con gcc, usa el -lm parámetro de línea de comando para vincular en la biblioteca matemática.
Si nota, las respuestas idénticas se publicaron con <= 1 minuto de diferencia. Eso podría ayudar a explicar por qué.
– Lucas
3 de octubre de 2013 a las 0:55
Karthik Ratnam
Usar así
#include <math.h>
#include <stdio.h>
int main(void)
{
for(int i = 1; i < 5; i++)
printf("pow(3.2, %d) = %lf\n", i, pow(3.2, i));
return 0;
}
Producción:
pow(3.2, 1) = 3.200000
referencia indefinida a ‘pow’
porque la potencia de cualquier número debe tener un valor entero como potencia
pow(x,y)
where, x must be real and y must be a whole number
¿Ha sido útil esta solución?
Tu feedback nos ayuda a saber si la solución es correcta y está funcionando. De esta manera podemos revisar y corregir el contenido.
Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos.
Configurar y más información
Un fragmento de código completo sería útil…
–Oliver Charlesworth
13 de noviembre de 2010 a las 18:37
¿Estás incluyendo math.h o no?
–Pete Kirkham
13 de noviembre de 2010 a las 18:37
Estoy incluyendo matemáticas.h, sí. El primer fragmento de código funciona y genera lo que se esperaba. Los otros dos dan la “referencia indefinida a ‘pow'”.
– elíseo devorado
13 de noviembre de 2010 a las 18:38
¿Está vinculando la biblioteca matemática al proporcionar el cambio -lm a gcc/g++?
– swatkat
13 de noviembre de 2010 a las 18:42
En su tercer fragmento de código, los valores dobles deben tener un
.0
después de ellos. Entonces,double a = 2.0;
nodouble a = 2;
.–Mateen Ulhaq
13 de noviembre de 2010 a las 20:37