-2

У меня сложная формула: две формулы SUMIFS, вложенные в формулу SUM. Концепция заключается в сумме сумм с учетом определенного периода времени и конкретного кода счета. Эта формула, кажется, отлично работает. Я получаю сумму 4119,20 для одного аккаунта и -4119,20 для другого аккаунта. Моя другая формула SUM, которая должна составлять группу, должна быть 0, но вместо этого читается как «9.09495E-13».

У меня есть шесть учетных записей в группе, и один из них, который "0", по-видимому, дает это "9.09495e-13". нет транзакций под этим аккаунтом вообще.

Кроме того, я попытался удалить формулу и просто ввести "0", но это также привело к сумме группы «9.0495e-13»

Я понимаю, что это расплывчато, но я надеюсь, что кто-то еще столкнулся с подобной проблемой.

РЕДАКТИРОВАТЬ 18-07-18-2221: Изображение моей проблемы

2 ответа2

2

То, на что вы наткнулись, - это вариант одной из первых вещей, преподаваемых в информатике. Это в основном ошибка переполнения с плавающей запятой («ошибка округления» в терминах непрофессионала).

В 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 (как уже отмечали другие)!

Если вы заинтересованы в этом дальше, эти заметки первого года довольно доступны.

Некоторая информация о сбое ракеты "Патриот".

1

Вы ожидали 0.0 но получили 9.0495e-13

9.0495e-13 - 0.0 , вам просто нужно изменить формат. Выберите ячейку, затем нажмите эту кнопку на панели задач:

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .