Это ссылка на комментарии в этом вопросе :
Этот код в Java производит 12.100000000000001, и он использует 64-битные двойные числа, которые могут точно представлять 12.1. - пиролистический
Это правда? Я чувствовал, что, поскольку число с плавающей запятой представлено как сумма степеней двух, вы не можете точно представить 12,1, независимо от того, сколько у вас битов. Однако, когда я реализовал оба алгоритма и напечатал результаты вызова их с помощью (12.1, 3) со многими значащими цифрами, я получил для его и моего соответственно:
12.10000000000000000000000000000000000000000000000000000000000000000000000000
12.10000000000000100000000000000000000000000000000000000000000000000000000000
Я напечатал это, используя String.format("%76f")
. Я знаю, что это больше нулей, чем необходимо, но я не вижу округления в 12.1.