Я знаю, что десятичное число 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
, который может быть представлен точно?