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 

problema con tipos punto flotante

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Consultas
Ver tema anterior :: Ver tema siguiente  
Autor Mensaje
Mensaje    Asunto: problema con tipos punto flotante Responder citando

Tengo problemas al comparar dos double que son iguales. Ambos leídos de una tabla DBF y modificados por operaciones normales (suma resta multiplicación división). Depurándolo me muestra los valores iguales y al hacer la comparación if(val1 == val2) o evaluando resulta falso. Se puede solucionar ? Pasa lo mismo con float con la variante de que este es más honesto y me muestra más decimales que se aproximan al valor contra el cual comparo pero no es igual
Ahí va el ejemplo que pude reproducir


void __fastcall TForm1::Button1Click(TObject *Sender)
{
#define TIPO double
//#define TIPO float
TIPO val1=0,
val2=0,
val3=0;//para comparar

val1 = 90;
val2 = .05;
int i=0,a;

while(val1 > 0){
val3 =((TIPO)90 - (val2*(TIPO)i));
if(val1 == (90 - (val2*i)))
a = 1;
else
a = 0;
val1-=val2;
i++;
}
}

Volver arriba
Mensaje    Asunto: problema con tipos punto flotante Responder citando

Hola martin, este tema ya se ha tratado en el foro. El problema está es en que los tipos de datos con coma flotante se almacenan en potencias de dos, y si almacenas un número que no es una potencia de 2 lo que hace es guardar el número que más se aproxima a el. por eso si tu quieres poner en una variable tipo float 12,12 lo más seguro es que te guarde 12,1199999999 o algo parecido.

Esto se puede evitar utilizando tipos de datos de con más precisión como el tipo double, long double, Extended ...
Pero al final en todos el problema puede ser el mismo, sólo que pueden afinar un poco más.

Otra solución si vas a utilizar números sin muchos decimales puede ser utilizar variables de tipo Currency, en la cual esto no ocurre.

Espero que te sirva. Un Saludo. Agur

Volver arriba
Mensaje    Asunto: problema con tipos punto flotante Responder citando

Gracias juanma es verdad ya habia probado con tipos de mayor presición y ocurría, osea falla en el if, gracias por el dato (no me lo sabia)lo solucioné con Currency
Volver arriba
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.