То, на что вы наткнулись, - это вариант одной из первых вещей, преподаваемых в информатике. Это в основном ошибка переполнения с плавающей запятой («ошибка округления» в терминах непрофессионала).
В Excel попробуйте
=SUM(A1:A4)
с:
A1 10^20
A2 1
A3 -10^20
A4 -1
Очевидно, мы ожидаем, что ответ будет 0
. Excel выдаст его как -1
.
Вы также можете попробовать =A1+A2+A3+A4
. Ответ снова -1
. Теперь попробуйте =A1+A3+A2+A4
в этом порядке. Excel теперь даст правильный ответ 0
.
Из-за способа, которым Excel хранит числа (IEEE 754), если вы попытаетесь добавить число, значительно меньшее к другому, оно отбросит его и, следовательно, ошибки.
В приведенном выше примере 10^20
+1
дает 10^20
.
Поэтому рекомендуется сначала сложить числа одинаковой величины.
В вашем примере, вероятно, также возникает проблема с ошибкой округления, возникающая из-за невозможности точно представить 4119.2 в двоичном виде.
По указанным выше причинам программисты и инженеры предпочитают хранить числа в виде целых чисел (целых чисел), а не чисел с плавающей запятой (не целых чисел), где такая точность имеет значение. Например, финансовые системы имеют строгие правила расчета только по целым числам (например, центы, а не доллары и центы). Точно так же время сохраняется в секундах от фиксированной даты. Классическим примером такой ошибки является отказ ракеты «Патриот» во время первой войны в Персидском заливе, в результате которого погибли 28 человек. Ошибка в 0,000000095 секунды, добавленная достаточное количество раз в сочетании с высокой скоростью полета «Скад», была достаточной для того, чтобы противоракетная система «Патриот» отказалась Скад как аномалия.
В вашем случае, для всех намерений и целей, 9x10 ^ -13 - это 0 (как уже отмечали другие)!
Если вы заинтересованы в этом дальше, эти заметки первого года довольно доступны.
Некоторая информация о сбое ракеты "Патриот".