01/04/2011, 22:20
|
| | Fecha de Ingreso: abril-2011
Mensajes: 14
Antigüedad: 13 años, 9 meses Puntos: 0 | |
Respuesta: Imprecisión de Double Hola a todos,
Siento decepcionarlos, pero la culpa no es de Java. De hecho, todo sistema de cómputo (y por lo tanto, todo lenguaje de programación) tiene el mismo problema, y se basa en un hecho simple: los computadores convencionales trabajan en base 2 (binario) y no en decimal, y la conversión entre decimal y binario es el problema, porque en base 2 son precisos.
Permítanme dar un ejemplo: Tomen las calculadoras convencionales, pongan "1", dividan entre 3, multipliquen por 3, y resten 1. Técnicamente debería dar 0, pero la mayoría de calculadoras arrojan un número de la forma 0.0000....1.
No es una falla de lenguaje, es una falla del computador. No creo que valga la pena entrar en el detalle de cómo se modelan los números decimales en computador (la teoría de signo, exponente y mantisa, formatos de 32 y 64 bits, IEEE 754, etcétera).
Sugerencia: al trabajar con números tipo Double siempre es necesario decidir la precisión (cantidad de decimales) y formatear la salida. Eso soluciona el problema (se puede formatear con la función String.format ó la clase DecimalFormat).
Saludos. |