¿Por qué agregar 0.1 múltiples veces permanece sin pérdidas?
Sé que el0.1
el número decimal no se puede representar exactamente con un número binario finito (explicación), entoncesdouble n = 0.1
perderá algo de precisión y no será exactamente0.1
. Por otra parte0.5
se puede representar exactamente porque es0.5 = 1/2 = 0.1b
.
Habiendo dicho eso, es entendible que agregar0.1
tres veces no dará exactamente0.3
entonces se imprime el siguiente códigofalse
:
double sum = 0, d = 0.1;
for (int i = 0; i < 3; i++)
sum += d;
System.out.println(sum == 0.3); // Prints false, OK
Pero entonces, ¿cómo es que agregar0.1
cinco veces dará exactamente0.5
? Se imprime el siguiente códigotrue
:
double sum = 0, d = 0.1;
for (int i = 0; i < 5; i++)
sum += d;
System.out.println(sum == 0.5); // Prints true, WHY?
Si0.1
no se puede representar exactamente, ¿cómo es que agregarlo 5 veces da exactamente0.5
que se puede representar con precisión?