El uso de la función pow () arroja un error de referencia indefinido en C

2 minutos de lectura

avatar de usuario
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

  • ¡Estás en el clavo! GCC utiliza MPFR. Aquí hay algo de información: gcc.gnu.org/gcc-4.3/changes.html#mpfropts

    – swatkat

    13 de noviembre de 2010 a las 18:46


  • 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

avatar de usuario
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?

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
Privacidad