problema con sqrt y con math.h

Agrupa todas las consultas sobre los lenguajes de programacion como C, C++, Python, Java ...

problema con sqrt y con math.h

Notapor lacabra25 » Jue May 14, 2009 6:25 pm

hola, estoy escribiendo algunas funciones y estructuras de vectores con las que usar vectores en los juegos despues sin tener que preocuparme con las operaciones con los vectores, el problema esta en que necesito hacer una raiz cuadrada, intento hacerlo con la funcion sqrt que segun tengo entendido esta definida en el include math.h pero al compilar me dice que es la primera referencia a sqrt y que no esta definida previamente, el codigo es el siguiente:

Código: Seleccionar todo
#include "vectores.h"
#include <math>

int componentes_vector(vector *a){
   register long int i=0;
   for(i=0; i<3>tipo == entero){
         a->array.componentes[i]= (a->array.extremo[i] - a->array.origen[i]);
      }else{
         a->array_decimal.componentes[i]= (a->array_decimal.extremo[i] - a->array_decimal.origen[i]);
      }
   }
   return 0;
}

double modulo_vector(vector *a){
register float r=0;
if(a->tipo == entero){
   register long int x, y, z;
   x= (a->coordenadas.componentes.x * a->coordenadas.componentes.x);
   y= (a->coordenadas.componentes.y * a->coordenadas.componentes.y);
   z= (a->coordenadas.componentes.z * a->coordenadas.componentes.z);
   r= sqrt(x+y+z);
}else{
   register float x, y, z;
   x= (a->coordenadas_decimal.componentes.x * a->coordenadas_decimal.componentes.x);
   y= (a->coordenadas_decimal.componentes.y * a->coordenadas_decimal.componentes.y);
   z= (a->coordenadas_decimal.componentes.z * a->coordenadas_decimal.componentes.z);
   r= sqrt(x+y+z);
}
return r;
}


¿cual es el problema de este error y como puedo evitar este problema?

Edito: El error lo da solamente cuando escribo en la terminal cada linea necesaria para compilar el codigo a mano, si la misma linea para compilarlo esta en un makefile lo cimpila sin dar error ¿a que se debe esto?
Esta cuenta ahora a pasado a la cuenta jhg
Avatar de Usuario
lacabra25
 
Mensajes: 222
Registrado: Mié Abr 02, 2008 9:45 pm
Ubicación: Tenerife (España)

Notapor Geo » Vie May 22, 2009 6:01 am

¿Estarás intentando utilizar <math> o <cmath>?
La imaginación es el límite.
Visita mi blog en inglés o en español.
Geo
 
Mensajes: 244
Registrado: Jue Ago 10, 2006 3:51 am
Ubicación: México

Notapor hugoruscitti » Vie May 22, 2009 11:20 pm

Cuando un problema como este ocurre, una
buena idea es probar con un ejemplo mas
pequeño.

Te dejo un programa que usa "sqrt" y es mas
pequeño y fácil de probar. Si este programa te
funciona, tendrías que ver alterar tu directiva
"include" o el tipo de dato que le envías a la
función.

Bueno, te dejo el código (archivo test.cc):

Código: Seleccionar todo
#include <math>
#include <stdio>

int main(int argc, char const* argv[])
{
    double a = 4;

    printf("La raiz cuadrada de %f es %f\n", a, sqrt(a));

    return 0;
}


su makefile, para que compilar sea mas sencillo:

Código: Seleccionar todo
CC=g++

test:test.o


y lo que imprime el programa en pantalla cuando
lo ejecutas:

Código: Seleccionar todo
La raiz cuadrada de 4.000000 es 2.000000


Espero te sirva la prueba, sino avisanos y lo
veo de nuevo.

PD: por favor la próxima vez intenta incluir la función
"main" y el mensaje de error, así todos podemos ver
el problema con mayor facilidad.
Avatar de Usuario
hugoruscitti
Site Admin
 
Mensajes: 1242
Registrado: Dom Jul 30, 2006 3:57 am
Ubicación: Buenos Aires, Argentina

Notapor deagleparty » Sab Jul 18, 2009 12:35 am

El problema es que estan definidas en la libmath (no en libc), y gcc no las incluye por defecto, mientras que g++ lo hace automaticamente.

Si utilizas gcc, deberias ejecutar:
gcc -o test test.c -lm

Si usas g++, no hace falta.
deagleparty
 
Mensajes: 1
Registrado: Sab Jul 18, 2009 12:32 am


Volver a Sobre lenguajes de programación

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 1 invitado

cron