Se o tipo duplo pode manipular os números 4.35 e 435, por que 4.35 * 100 é avaliado como 434.99999999999994? [duplicado

Esta pergunta já tem uma resposta aqui:

matemática dos pontos flutuantes está quebrad 28 respostas Estranho estranhamento - o que há de especial em “100”? 2 respostas

Pelo que entendi, alguns números não podem ser representados com exatidão em binário, e é por isso que a aritmética de ponto flutuante às vezes nos dá resultados inesperados; como 4,35 * 100 = 434,99999999999994. Algo semelhante ao que acontece com 1/3 em decimal.

Isso faz sentido, mas isso induz outra pergunta. Parece que, em binário, 4,35 e 435 podem ser representados com exatidão. É quando para de fazer sentido para mim. Por que 4,35 * 100 é avaliado como 434.99999999999994? 435 e 4,35 têm uma representação exata na dinâmica de tipo duplo:

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 questão foi marcada como duplicada, e não é. Como você pode ver na resposta aceita, minha confusão foi em relação à discrepância entre o valor real e o valor impress

questionAnswers(4)

yourAnswerToTheQuestion