Puedo escribir un código en C que tiene la función de potencia que es de matemáticas.h biblioteca. cuando he compilado mi programa, recibí un mensaje de error que es » undefined reference to ‘pow’ función «, puedo compilar mi programa con el compilador gcc (fedora 9).

Insertar -lm bandera a gcc entonces, el error se omite, pero la salida de la función pow es 0.

#include<math.h>
main()
{
double a = 4, b = 2;
b = pow(b,a);
}

Alguien me puede ayudar? Es que hay un problema en mi compilador??

Gracias.

el error se omite, pero la salida es 0 ¿Qué salida ? No está de imprimir nada.
tal vez OP significó la valor de retorno de pow()?
Yo uso printf(«%d\n», b); para imprimir el valor.
Y fue el printf de la línea que contiene el error. Asegurarse de que publicar TODO el código.
Posibles duplicados de C pow() no funciona con una variable exponente

OriginalEl autor hamb | 2012-05-27

4 Comentarios

  1. 9

    Su programa no salida de la nada.

    El 0 que usted se refiere es, probablemente, el código de salida, que será 0 si no explícitamente retorno de main.

    Pruebe a cambiar a una compatible con los estándares de la firma y devolución b:

    int main(void) {
      ...
      return b;
    }

    Tenga en cuenta que los valores de retorno es esencialmente limitada a 8 bits-la pena de la información de manera muy, muy limitado.

    Uso printf para mostrar el valor.

    #include <stdio.h>
    ...
      printf("%f\n", b);
    ...

    Que debe uso de punto flotante, el especificador de conversión (f, g o e) para imprimir double valores. Usted puede utilizar d o a otros y esperar resultados consistentes. (De hecho, esto sería un comportamiento indefinido.)

    Buena respuesta. Mi conjetura es que el OP es el uso equivocado de printf especificador.
    Yo uso printf para mostrar el valor b. el valor de b es 0. Yo uso %d especificador.
    Si el uso de printf, como he puesto arriba, verás 16.0000.... %d es para los tipos enteros.
    su bola de cristal es muy fuerte.
    OK. Gracias, eso es trabajo fino.

    OriginalEl autor Mat

  2. 12

    Para todos los demás que solicitan una respuesta:

    Esto no va a funcionar:

    gcc my_program.c -o my_program

    Se va a producir algo como esto:

    /tmp/cc8li91s.o: In function `main':
    my_program.c:(.text+0x2d): undefined reference to `pow'
    collect2: ld returned 1 exit status

    Esto funcionará:

    gcc my_program.c -o my_program -lm
    Esto ya se dijo en la pregunta misma. (Y en otros muchos Qs y Como en el Desbordamiento de la Pila.)
    Es que a mi me funciona ahora!!!, Gracias amigo!!
    Gracias. trabajó para mí

    OriginalEl autor goFrendiAsgard

  3. 4

    Te falta el printf línea para imprimir el valor a stdout.
    Pruebe el siguiente:

    #include <stdio.h>
    #include <math.h>
    
    int main() {
            double a=4, b=2, c;
    
            c = pow(b,a);
            printf("%g^%g=%g\n", a,b,c);
            return 0;
    }

    La salida será:

    4^2=16
    Thanx. Es un trabajo.

    OriginalEl autor dAm2K

  4. 3

    Hay una confusión aquí respecto a la base y el exponente. Esto no es inmediatamente evidente, porque ambos 2^4 y 4^2 igual 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
    }

    OriginalEl autor Tom Bernard

Dejar respuesta

Please enter your comment!
Please enter your name here