Pregunta

¿Por qué hace lo siguiente poco de trabajo de código en C:

int res = pow(2, 3);
printf("%d\n", res);

Si bien esto otro no?

int a = 2;
int b = 3;

int res = pow(a, b);
printf("%d\n", res);

Incluso si trato

double a = 2;
double b = 3;

double res = pow(a, b);
printf("%f\n", res);

Me aparece un

referencia indefinida a `pow '

¿Qué estoy haciendo mal?

¿Fue útil?

Solución

Cuando funciona, es porque el cálculo hecho por el propio compilador (e incluido en el binario como si lo escribió)

printf("8\n");

Cuando no funciona, se debe a que la función pow está incluido en la biblioteca matemática y la biblioteca matemática no está vinculado con el binario por defecto.
Para obtener la biblioteca matemática para ser vinculado, si su compilador gcc es, el uso

gcc ... -lm ...

Con otros compiladores, debe ser el mismo :)
pero leer la documentación

Otros consejos

sonidos undefined reference to 'pow' como un error de enlace. Usted no está ligando en la biblioteca de matemáticas, incluso si se introduce la función pow incluyendo <math.h>.

Con gcc, utilizar el parámetro de línea de comandos -lm a los eslabones de la lib matemáticas.

Usar como esto

#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;
}

Salida:

pow (3,2, 1) = 3,200000

referencia indefinida a `pow '

porque el poder a 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
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top