Представление с плавающей точкой является точным, за исключением того, что арифметика с плавающей точкой находится в базе 2, а десятичные числа, такие как 0,1, имеют бесконечное двоичное расширение.Поскольку числа с плавающей точкой имеют конечное число битов, необходимо округлить бесконечное расширение 0,1, и при сложении накапливается ошибка округления, что приводит к расхождению.
Однако большинство операций с плавающей запятой операций являются неточными: для результатов обычно требуется больше битов точности, чем для фиксированного числа битов, поэтому ЦПУ автоматически округляет результат, чтобы соответствовать доступной точности.Как вы заметили, такие ошибки округления накапливаются в длинных цепочках вычислений и приводят иногда к огромным расхождениям между фактическим и «правильным» результатом.(«правильный» определяется как результат, полученный в арифметике с бесконечной точностью.)