Si el tipo doble puede manejar los números 4.35 y 435, ¿por qué 4.35 * 100 se evalúa como 434.99999999999994? [duplicar

Esta pregunta ya tiene una respuesta aquí:

Las matemáticas de punto flotante están rota 28 respuestasRodidad extraña: ¿qué tiene de especial "100"? 2 respuestas

Según tengo entendido, algunos números no se pueden representar con exactitud en binario, y es por eso que la aritmética de coma flotante a veces nos da resultados inesperados; como 4.35 * 100 = 434.99999999999994. Algo similar a lo que sucede con 1/3 en decimal.

Eso tiene sentido, pero esto induce otra pregunta. Parece que en binario, 4.35 y 435 se pueden representar con exactitud. Ahí es cuando deja de tener sentido para mí. ¿Por qué 4.35 * 100 se evalúa como 434.99999999999994? 435 y 4.35 tienen una representación exacta en la dinámica de tipo doble:

double number1 = 4.35;
double number2 = 435;
double number3 = 100;
System.out.println(number1); // 4.35
System.out.println(number2); // 435.0
System.out.println(number3); // 100.0
// So far so good. Everything ok. 

System.out.println(number1 * number3); // 434.99999999999994 !!!
// But 4.35 * 100 evaluates to 434.99999999999994

¿Por qué

Edit: esta pregunta se marcó como duplicada, y no lo es. Como puede ver en la respuesta aceptada, mi confusión estaba relacionada con la discrepancia entre el valor real y el valor impreso.

Respuestas a la pregunta(4)

Su respuesta a la pregunta