Переполнение запрета в плавающей запятой x + x + x- это точно правильно округленное (т. Е. Ближайшее) число с плавающей запятой к действительному 3 * x, x + x + x + xравное 4 * x, и x + x + x + x + xопять-таки правильное округленное приближение с плавающей запятой для 5 * x.
Первый результат, для x + x + x, вытекает из того факта, что x + xявляется точным. x + x + xТаким образом, является результатом только одного округления.
Второй результат более сложный, одна демонстрация его обсуждается здесь (а Стивен Канон ссылается на другое доказательство путем анализа кейса на последних 3 цифрах x). Подводя итог, можно сказать , что либо 3 * xнаходится в той же бинаде, что и 2 *, xлибо в той же бинаде, что и 4 * x, и в каждом случае можно сделать вывод, что ошибка при третьем добавлении отменяет ошибку при втором добавлении ( первое добавление будет точным, как мы уже говорили).
Третий результат, « x + x + x + x + xправильно округленный», вытекает из второго так же, как первый получается из точности x + x.
Второй результат объясняет, почему 0.1 + 0.1 + 0.1 + 0.1именно число с плавающей запятой 0.4: рациональные числа 1/10 и 4/10 аппроксимируются одинаково, с одинаковой относительной погрешностью при преобразовании в число с плавающей запятой. Эти числа с плавающей точкой имеют соотношение ровно 4 между ними. Первый и третий результаты показывают, что 0.1 + 0.1 + 0.1и 0.1 + 0.1 + 0.1 + 0.1 + 0.1можно ожидать, что в них будет меньше ошибок, чем можно было бы сделать из наивного анализа ошибок, но сами по себе они соотносят результаты только с соответственно 3 * 0.1и 5 * 0.1, что можно ожидать, будут близки, но не обязательно идентичны 0.3и 0.5.
Если вы продолжите добавление 0.1после четвертого сложения, вы, наконец, увидите ошибки округления, из-за которых « 0.1добавлено к себе n раз» на некоторое время отклоняется от двоичного кода. После этого начнется поглощение, и кривая станет плоской.n * 0.1 и еще больше расходятся от n / 10. Если бы вы наносили на график значения «0.1, добавленные к себе n раз» как функцию от n, вы бы наблюдали линии с постоянным наклоном по бинадам (как только результат n-го сложения обречен на попадание в конкретный бинар, можно ожидать, что свойства добавления будут аналогичны предыдущим добавлениям, которые дали результат в той же самой бинаде). В пределах одного и того же бинада ошибка будет увеличиваться или уменьшаться. Если бы вы посмотрели на последовательность уклонов от бинада до бинада, вы бы узнали повторяющиеся цифры0.1