ProgramaciónDesarrollador Java

¿Cuáles son las características del trabajo con los tipos de datos float y double en Java? ¿Cuándo aplicar cada uno de ellos y cuáles pueden ser las trampas al trabajar con números de punto flotante?

Supere entrevistas con el asistente de IA Hintsage

Respuesta

En Java existen dos tipos principales para representar números de punto flotante: float (32 bits) y double (64 bits). float es menos preciso y ocupa menos memoria, mientras que double proporciona mayor precisión y es el tipo preferido por defecto para números de punto flotante.

  • Cuándo usar float: si hay requisitos muy estrictos sobre el volumen de memoria (por ejemplo, un gran número de números en un arreglo, dispositivo con recursos limitados).
  • Cuándo usar double: prácticamente siempre, si no hay restricciones especiales, ya que double proporciona mejor precisión.

Características importantes:

  • Las operaciones con punto flotante pueden llevar a la acumulación de errores de redondeo.
  • Nunca uses == para comparar float/double, utiliza comparación con tolerancia.

Ejemplo de comparación con delta:

public class DoubleComparison { public static void main(String[] args) { double a = 0.1 + 0.2; double b = 0.3; double epsilon = 1e-10; if (Math.abs(a - b) < epsilon) { System.out.println("Iguales con tolerancia"); } else { System.out.println("No son iguales"); } } }

Pregunta capciosa

Pregunta: ¿Qué imprimirá el siguiente código?

System.out.println(0.1 + 0.2 == 0.3);

Respuesta: Este código imprimirá false, porque el resultado de la suma 0.1 + 0.2 en formato binario IEEE 754 no es exactamente igual a 0.3 debido a las peculiaridades del almacenamiento de fracciones decimales en los tipos float y double.

Ejemplos de errores reales debido al desconocimiento de los matices del tema


Historia

En un gran proyecto financiero, se usaban contadores de dinero en tipo double. En la práctica, operaciones pequeñas a menudo conducían a la acumulación de errores de redondeo, lo que resultaba en sumas finales diferentes por unos pocos centavos. El problema fue resuelto cambiando double por BigDecimal.


Historia

En un motor de juego se utilizaba un arreglo float para almacenar las coordenadas de objetos en un mundo con grandes valores. Al moverse a grandes distancias, se comenzó a perder la precisión en la posición de los objetos, lo que llevó a "temblores" de los objetos en la pantalla. Cambiar float por double y centrar las coordenadas ayudaron a resolver el problema.


Historia

En un programa de análisis estadístico, se comparaban valores dobles usando el operador == y se obtenía un número inesperado de "desaciertos". Después de cambiar a comparación con delta, la lógica del programa funcionó correctamente.