Ver Mensaje Individual
  #17  
Antiguo 21-12-2006
Avatar de rcarrillom
[rcarrillom] rcarrillom is offline
Miembro Premium
 
Registrado: dic 2004
Ubicación: UK / North Sea / Norway / Golfo de México / Frente a mi Laptop
Posts: 219
Reputación: 20
rcarrillom Va por buen camino
Cita:
Empezado por egostar
Solo quiero comentar que si el código ejemplo es similar al código real (según tú) a nadie beneficia haber mostrado el primero, es decir, no se ha resuelto tu problema y por otro lado pienso que le hiciste perder el tiempo a la gente que amablemente trato de colaborar.

Tu problema es específico en el código real y nunca se va a localizar el mismo error/problema/defecto (llamalo como quieras) en el código ejemplo.

Hasta pronto

Edito:

Lo único congruente es el titulo del hilo (COSA DE LOCOS)
Coincido totalmente, siempredebe ser el código real.
Las comparaciones de tipos que tienen decimales es uno de los mayores problemas que hay en el mundo de la PC, al menos para mí ; es un problema inherente al diseño del procesador para almacenar y manejar las precisiones y no es específico a un lenguaje, vamos, no es de Delphi. Yo lo viví en carne propia al crear una aplicación para tratamiento de señales de sensores que deben ser procesados con precisiones de 9 posiciones decimales, o mejor dicho 0.00000001 unidades de error máximo en los cálculos, ncluyendo las maditas comparaciones de floats. También me quebré la cabeza y por 2 semanas investigando la comparación que fallaba a partir de los 6 decimales y en el Watch salían valores <> 0 (por eso nunca entraba al if) al restar el valor comparado contra el valor de la condición, que según yo y la lógica de este universo eran valores iguales; y buscando por Internet encontré la causa, que es la forma cómo el procesador almacena y reconstruye el valor original (que al final no siempre resulta el original); como no es entero, usa una serie de estratagemas para almacenar la parte decimal. La solución en mi caso fué limitar la precisión máxima de 9 decimales para todos los cálculos, truncando lo demás. Para esto se puede usar SimpleRoundTo de la unidad Math ó la combinación de RoundTo / SetRoundMode. Sería algo similar al hilo
quedarme con Centésimas en un float.
Saludos
__________________
eLcHiCoTeMiDo - Rompecorazones profesional
Yo no soy presumido; ¿Pero de qué sirve mi humilde opinión contra la de los espejos?
Salva a un nylon, usa prendas de piel de foca
Responder Con Cita