Смешные (округления?) Ошибки при добавлении
В одном столбце есть числа (всегда с двумя десятичными знаками, некоторые вычисляются, но все умножения и деления округляются до 2 десятичных знаков), а другой - кумулятивный. Накопительная колонка имеет формулу =<above cell>+<left cell>
,
В накопительном столбце результат равен 58,78, следующий номер в первом столбце равен -58,78. Из-за различного форматирования для нуля, чем для положительных или отрицательных чисел, я заметил, что что-то не так. Если изменить формат на несколько десятичных знаков, числа будут выглядеть следующим образом:
£58.780000000000000000000000000000
-£58.780000000000000000000000000000 £0.000000000000007105427357601000
Ненулевой ноль составляет около 2^(-47). В другой раз цифры в такой же ситуации:
£50.520000000000000000000000000000
-£50.520000000000000000000000000000 -£0.000000000000007105427357601000
Как это может случиться?
Кроме того, если я изменю ячейку в накопительном столбце на фактическое число 58,78, результат внезапно станет равным нулю.
1 ответ
Google Sheets использует арифметику с плавающей запятой двойной точности, которая создает такие артефакты. Относительная точность этого формата составляет 2^(-53), поэтому для числа размером около 2^6 = 64 мы ожидаем ошибку усечения 2^(-47).
Некоторые пользователи электронных таблиц будут обеспокоены, если узнают, что "58,78" на самом деле не 58,78, потому что это число не допускает точного представления в этом формате с плавающей запятой. Таким образом, электронная таблица скрывает правду, округляя число для отображения и печатая фальшивые нули при запросе дополнительных цифр. Те нули после 58,78 являются поддельными.
Истина обнаруживается, когда вычитаете два числа, которые кажутся идентичными, но не являются - потому что они были вычислены по-разному, например, одно получено как сумма, а другое - прямым вводом. Округление результата вычитания до нуля было бы слишком большой ложью: это больше не вопрос небольшой относительной ошибки, разница между 2^(-47) и 0 может быть важной. Отсюда неожиданное раскрытие механики за кадром.
См. Также: Почему в Google Spreadsheets написано, что ноль не равен нулю?