¿Por qué el siguiente bit de código de trabajo 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 intento

double a = 2;
double b = 3;

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

Puedo obtener una

undefined reference to `pow’

¿Qué estoy haciendo mal?

  • Una completa fragmento de código sería útil…
  • Están incluidas las matemáticas.h o no?
  • Estoy incluyendo las matemáticas.h, sí. El primer fragmento de código que funciona y salidas de lo que había esperado. Los otros dos dan el «undefined reference to ‘prisionero de guerra'».
  • Se que la vinculación de las matemáticas de la biblioteca proporcionando -lm cambiar a gcc/g++?
  • En su tercer fragmento de código, el doble de los valores debe tener un .0 después de ellos. Así, double a = 2.0;, no double a = 2;.
  • en esta situación el .0 es redundante. Usted necesita (o yeso), por ejemplo en 2/32/3.02/(double)3.
  • Aún así, es una «buena práctica».
  • Estás #includeing una biblioteca como math.h?

4 Comentarios

  1. 54

    Cuando funciona, es porque el cálculo fue hecho por el propio compilador (y se incluye en el binario como si lo escribí)

    printf("8\n");

    Cuando no funciona, es porque el pow función se incluye en la de matemáticas y la biblioteca de matemáticas de la biblioteca no está vinculado con su binario de forma predeterminada.

    Para obtener la librería math vinculadas, si el compilador gcc, el uso de

    gcc ... -lm ...

    Con otros compiladores, debe ser la misma 🙂

    pero leer la documentación

    • Estás en el clavo! Utiliza GCC MPFR. Aquí un poco de info: gcc.gnu.org/gcc-4.3/changes.html#mpfropts
    • MPFR! Woh! 🙂 Totalmente de knock me out cuando yo estaba tratando de exactamente la misma cosa y no puede creer lo que he visto.
  2. 17

    undefined reference to 'pow' suena como un error del vinculador. No vincular en las matemáticas de la biblioteca, incluso si se introduce la función pow incluyendo <math.h>.

    Con gcc, el uso de la -lm parámetro de línea de comandos en el vínculo de la matemática lib.

    • Si usted nota, las respuestas idénticas fueron publicados <= intervalo de 1 minuto. Que podría ayudar a explicar por qué.
  3. 2

    Uso como esta

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

    De salida:

    pow(3.2, 1) = 3.200000

    • +1 para el ejemplo de trabajo (aunque realmente no responder a la pregunta): ¿por Qué el downvote? (no fui yo) — supongo que porque ‘»%lf»‘ no es válida especificador de conversión, pero la downvoter podría ser un poco más útil
  4. -5

    undefined reference to `pow’

    porque el poder a cualquier número debe tener un valor entero como poder

    pow(x,y)
    where, x must be real and y must be a whole number
    • Sé que esto es viejo, pero sólo para mencionar, esto no es correcto, pow() toma dos argumentos. 😉

Dejar respuesta

Please enter your comment!
Please enter your name here