Я знаю, что десятичное число 0.1 не может быть представлено точно с конечным двоичным числом (объяснение), поэтому double n = 0.1 потеряет некоторую точность и не будет точно 0.1. С другой стороны, 0.5 можно представить точно, потому что это 0.5 = 1/2 = 0.1b.
Сказав, что понятно, что добавление 0.1 три раза не даст точно 0.3, поэтому следующий код печатает false:
double sum = 0, d = 0.1;
for (int i = 0; i < 3; i++)
sum += d;
System.out.println(sum == 0.3); // Prints false, OK
Но как получается, что добавление 0.1 пять раз даст ровно 0.5? Следующий код печатает true:
double sum = 0, d = 0.1;
for (int i = 0; i < 5; i++)
sum += d;
System.out.println(sum == 0.5); // Prints true, WHY?
Если 0.1 не может быть представлено точно, как это сделать, добавив его 5 раз, дает ровно 0.5, который может быть представлен точно?