Club Builder - Foros de discusión Club Builder
Foro de C++Builder en español
 
 FAQFAQ   BuscarBuscar   MiembrosMiembros   Grupos de UsuariosGrupos de Usuarios   RegistrarseRegistrarse 
 PerfilPerfil   Entra para ver tus mensajes privadosEntra para ver tus mensajes privados   EntrarEntrar 

Donde esta el fallo?

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Consultas
Ver tema anterior :: Ver tema siguiente  
Autor Mensaje
Mensaje    Asunto: Donde esta el fallo? Responder citando

Código:

 {
          cosL = ((Latitude)+(LatCur)/2);
          Alfa = atan(Latitude)-(LatCur)/(Longitude)-(LongCur)* cosL;
          dist = ((Longitude)-(LongCur)* cosL / cos (Alfa));
          dist = dist * 60 * 1852;
          lblDistCur->Caption = dist;
        }

con esta operacion intento calcular la distancia entre dos puntos mediante latitudes y longitudes, no me genera ningun error de compilacion pero al ejecutar me salta un error "Floating point division by zero" no tengo demasiada idea , a ver si alguien me echa un cable.

por cierto declaro cosL Alfa y dist como int.
Gracias machotes
_________________
El hombre es el unico ser que tropieza dos veces en la misma piedra ( en mi caso infinitas veces)
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Responder citando

no se exactamente como será la fórmula pero estas teniendo en cuenta los paréntesis bien?


cosL = ((Latitude)+(LatCur)/2);
por ejemplo una cosa es eso y otra cosa es:

cosL=(Latitude+LatCur)/2
Volver arriba
Mensaje    Asunto: Responder citando

Hola,

Ese error de lo da porque esta dividiendo por cero.

Comprueba los valores que te da.

Para ello, crea un punto de ruptura (breakpoint). Te colocas sobre la linea en la cual deseas parar el programa (por ejemplo al principo de esa funcion, en el cosL) y vas al menu Run -> Add breeakpoint -> Source Breakpoint y Ok. Berras que se pone la linea en rojo. Si pulsa sobre el ponto rojo de la izquierda, lo quitas. (Dejalo, no lo quites).
A continuacion, ejecuta el programa y veras que al llegar a esa linea el programa se para.
A continuacion, pon los valores a comprobar. Para ello ve a Run -> Add Watch y en expresion pon lo que quieres verificar por ejemplo cosL. Pon todas las expresiones que desees.
Una vez tienes el programa parado, ejecutalo linea a linea (pulsa f8 ) y verifica estos valores. Asi podras ver donde falla el programa.

Otra cosa para evitar fallos de programa es mejor poner

Código:

try
{
... expresion a evaluar.
}
catch ( ... )
{
... lo que debe hacer en caso de fallo
}


Un saludo.
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Responder citando

Bueno, los problemas se solventan, pero voy a complicarlo mas,esta formula ha de darme mas exactitud, pero no se como representar ^2.
[code]
d=2*asin(sqrt((sin((lat1-lat2)/2))^2 +
cos(lat1)*cos(lat2)*(sin((lon1-lon2)/2))^2))
%5ouܙcode]
_________________
El hombre es el unico ser que tropieza dos veces en la misma piedra ( en mi caso infinitas veces)
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Responder citando

prueba con sqrt (1/2) ekivale al cuadrao no?
Volver arriba
Mensaje    Asunto: prueba con... Responder citando

Asi sirve y con pow(x,2) tambien si son valores muy grandes usa powl espero que asi sea, disculpa si me equivoco casi no recuerdo el prototipo de la funcion

seria asi:

w=pow(asin(sqrt((sin((lat1-lat2)/2)),2)

q=pow(cos(lat1)*cos(lat2)*(sin((lon1-lon2)/2),2)

w= 2*w + q
_________________
I was sent....
aarzak_@hotmail.com
http://aarzak.fadlan.com
Volver arriba
Ver perfil de usuario Enviar mensaje privado Visitar sitio web del autor MSN Messenger
Mostrar mensajes de anteriores:   
Cambiar a:  
No puedes publicar temas nuevos en este foro
No puedes responder a temas en este foro
No puedes editar tus mensajes en este foro
No puedes borrar tus mensajes en este foro
No puedes votar en las encuestas de este foro


Hosting WordPress Indedmedia desde 3,99 €
© 2002–2026 Club Builder · Funciona con phpBB.