Сложение и вычитание в Excel и только
От: Cicero www.ya.ru
Дата: 10.02.16 20:27
Оценка: :))) :))) :)))
Итак простая задачка для Excel:
Встаем прямо на самую первую ячейку A1 и начинаем вводить числа в столбик(вводим число и Enter и так далее):
0,1
1
0,57
-0,68
0
-0,79
Готово!
Теперь формула в ячейку A7: =A1-СУММ(A2:A6)
Ответ ожидается равным нулю.
Сделайте форматы ячеек "Числовой", число десятичных знаков 20 и Вы увидите волшебное число: 0,00000000000000024980
Вы вот тут можете грешным делом захотеть упростить задачу и просто просуммировать все и получить ожидаемые 0.2
формула "=СУММ(A1:A6)" дает ответ: 0,20000000000000000000
И никакого фокуса не выйдет!
Так что секретная формула именно =A1 - СУММ(A2:A6)
(Хотя допускаю что есть и другие)

А Вы думаете предпоследнее число там зря?
Вставьте в ячейку A5 вместо нуля единицу и получите ответ: -1,00000000000000000000

Какие будут мнения?

P.S. Только что столкнулся и слегка ошарашен удивлен.
Пока не разбирался да и поздновато сегодня.

P.S.S.
Ячейки можно выбирать любые, я тут писал именно эти чтоб было понятно где что.
И эти числа не единственная комбинация.
Первоначальные числа в расчете которых я столкнулся с данным эффектом были совершенно большие, я их специально уменьшил.
Но эффект как видите остался.

Или я что то путаю уже на ночь глядя?
O tempora! O mores!
Отредактировано 10.02.2016 21:13 Cicero . Предыдущая версия . Еще …
Отредактировано 10.02.2016 20:43 Cicero (Убрал лишний знак равно) . Предыдущая версия .
Re: Сложение и вычитание в Excel и только
От: T4r4sB Россия  
Дата: 10.02.16 20:38
Оценка:
Не знаю, получается 0.2 и 1.2. Шо в уме, шо в екселе, шо в самодельном калькуляторе.
Re: Сложение и вычитание в Excel и только
От: Зверёк Украина https://zverok.github.io
Дата: 10.02.16 20:48
Оценка: +3
Здравствуйте, Cicero, Вы писали:

C>Итак простая задачка для Excel:

C>Встаем прямо на самую первую ячейку A1 и начинаем вводить числа в столбик(вводим число и Enter и так далее):
C>0,1
C>1
C>0,57
C>-0,68
C>0
C>-0,79
C>Готово!
C>Теперь формула в ячейку A7: =A1-СУММ(A2:A6)
C>Ответ ожидается равным нулю.
C>Сделайте форматы ячеек "Числовой", число десятичных знаков 20 и Вы увидите волшебное число: 0,00000000000000024980

Руби:
[0.1, 1.0, 0.57, -0.68, 0.0, -0.79].reduce(:+)
# => 0.19999999999999984


Питон:
sum([0.1, 1.0, 0.57, -0.68, 0.0, -0.79])
# 0.19999999999999984


См. What Every Programmer Should Know About Floating-Point Arithmetic
Re[2]: Сложение и вычитание в Excel и только
От: Cicero www.ya.ru
Дата: 10.02.16 20:52
Оценка:
Здравствуйте, T4r4sB, Вы писали:

TB>Не знаю, получается 0.2 и 1.2. Шо в уме, шо в екселе, шо в самодельном калькуляторе.


Давайте считать вместе:
сначала посчитаем сумму "СУММ(A2:A6) = 1+0,57-0,68-0,79
1) 1+0,57=1,57
2) 1,57-0,68=0,89
3) 0,89-0,79=0,1
т.о. СУММ(A2:A6)=0,1
теперь вычитаем это из A1.
A1 у нас тоже 0,1.
т.е. последнее действие:
4) 0,1-0,1 = 0

Где ошибка?
O tempora! O mores!
Re[2]: Сложение и вычитание в Excel и только
От: Cicero www.ya.ru
Дата: 10.02.16 20:58
Оценка:
Здравствуйте, Зверёк, Вы писали:

Зё>Здравствуйте, Cicero, Вы писали:


C>>Теперь формула в ячейку A7: =A1-СУММ(A2:A6)


Зё>Руби:

Зё>
Зё>[0.1, 1.0, 0.57, -0.68, 0.0, -0.79].reduce(:+)
Зё># => 0.19999999999999984 
Зё>


Зё>Питон:

Зё>
Зё>sum([0.1, 1.0, 0.57, -0.68, 0.0, -0.79])
Зё># 0.19999999999999984
Зё>


Зё>См. What Every Programmer Should Know About Floating-Point Arithmetic

А Вы формулу Excel "=A1-СУММ(A2:A6)" правильно перевели?
А то у меня формула "=СУММ(A1:A6)" дает ответ: 0,20000000000000000000
O tempora! O mores!
Re[3]: Сложение и вычитание в Excel и только
От: k55 Ниоткуда  
Дата: 10.02.16 20:59
Оценка:
Здравствуйте, Cicero, Вы писали:

C>Здравствуйте, T4r4sB, Вы писали:


TB>>Не знаю, получается 0.2 и 1.2. Шо в уме, шо в екселе, шо в самодельном калькуляторе.


C>Давайте считать вместе:

C>сначала посчитаем сумму "СУММ(A2:A6) = 1+0,57-0,68-0,79
C>1) 1+0,57=1,57
C>2) 1,57-0,68=0,89
C>3) 0,89-0,79=0,1
C>т.о. СУММ(A2:A6)=0,1
C>теперь вычитаем это из A1.
C>A1 у нас тоже 0,1.
C>т.е. последнее действие:
C>4) 0,1-0,1 = 0

C>Где ошибка?

Почему из 0.1 вычитаем 0.1, если знак везде +?
Если есть желание — найдется 1000 возможностей.
Если нет желания — найдется 1000 причин.
Re[4]: Сложение и вычитание в Excel и только
От: k55 Ниоткуда  
Дата: 10.02.16 21:01
Оценка:
C>>Где ошибка?
k55>Почему из 0.1 вычитаем 0.1, если знак везде +?
Все понял. Видать как и все остальные подумал что там сумма всех полей.
Если есть желание — найдется 1000 возможностей.
Если нет желания — найдется 1000 причин.
Re: Сложение и вычитание в Excel и только
От: k55 Ниоткуда  
Дата: 10.02.16 21:09
Оценка:
Ну это это к в C++ float или double. Смотри вещественные числа, Мантисса и Капулетты.

Если поля в Экселе указать как Number с 2 знаками после запятой, то он все красиво показывает.
Если формулу укзаать A1-A2-A3-A4-A5-A6-A7 то он ноль рисует. Видать SUM вносит погрешность.
Если есть желание — найдется 1000 возможностей.
Если нет желания — найдется 1000 причин.
Re[3]: Сложение и вычитание в Excel и только
От: T4r4sB Россия  
Дата: 10.02.16 21:16
Оценка:
Здравствуйте, Cicero, Вы писали:
C>Давайте считать вместе:
А, я прочитал невнимательно. Я просто сумму взял :D
Мог бы не напускать туману, сразу предложить вбить в калькулятор
0.1-(1+0.57-0.68-0.79)
мой самодельный выдаёт 0.33881317890172013e-00019, например
Re: Сложение и вычитание в Excel и только
От: alex_mah Россия www.elsy.ru
Дата: 10.02.16 21:18
Оценка: +10 :))) :)
Здравствуйте, Cicero, Вы писали:

C>Итак простая задачка для Excel:

C>...

Кто-то для себя открыл спецэффекты float?
Re[3]: Сложение и вычитание в Excel и только
От: Зверёк Украина https://zverok.github.io
Дата: 10.02.16 21:33
Оценка:
Здравствуйте, Cicero, Вы писали:

Зё>>См. What Every Programmer Should Know About Floating-Point Arithmetic

C>А Вы формулу Excel "=A1-СУММ(A2:A6)" правильно перевели?
C>А то у меня формула "=СУММ(A1:A6)" дает ответ: 0,20000000000000000000

Сорри, насчёт формулы я невнимателен. Но по сути ответ дал верный
Re[4]: Сложение и вычитание в Excel и только
От: CreatorCray  
Дата: 11.02.16 00:04
Оценка:
Здравствуйте, T4r4sB, Вы писали:

TB>мой самодельный выдаёт 0.33881317890172013e-00019, например


Мой самодельный выдаёт 0
Может ты свой неправильно готовишь?
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[5]: Сложение и вычитание в Excel и только
От: netch80 Украина http://netch80.dreamwidth.org/
Дата: 11.02.16 05:58
Оценка:
Здравствуйте, CreatorCray, Вы писали:

TB>>мой самодельный выдаёт 0.33881317890172013e-00019, например


CC>Мой самодельный выдаёт 0

CC>Может ты свой неправильно готовишь?

Младшие биты мантиссы при конверсии из текстовых в плавучку это серьёзнейшая головная боль, даже массовые библиотечные реализации strtod() с компанией тут лажают.
Зависание при конверсии пограничного значения (Java, PHP).
Или тут "Python now uses David Gay’s algorithm for finding the shortest floating point representation that doesn’t change its value", причём в обе стороны (результат точный, но сама конверсия значительно дороже, и её посчитали оправданной только недавно).
The God is real, unless declared integer.
Re[6]: Сложение и вычитание в Excel и только
От: CreatorCray  
Дата: 11.02.16 06:57
Оценка:
Здравствуйте, netch80, Вы писали:

CC>>Мой самодельный выдаёт 0

CC>>Может ты свой неправильно готовишь?

N>Младшие биты мантиссы при конверсии из текстовых в плавучку

Я забыл тег irony, my bad.

Мой калькулятор внутри все числа представляет в виде дроби. Там нет незапланированных ошибок округления.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[7]: Сложение и вычитание в Excel и только
От: netch80 Украина http://netch80.dreamwidth.org/
Дата: 11.02.16 07:12
Оценка: +1
Здравствуйте, CreatorCray, Вы писали:

CC>>>Мой самодельный выдаёт 0

CC>>>Может ты свой неправильно готовишь?
N>>Младшие биты мантиссы при конверсии из текстовых в плавучку
CC>Я забыл тег irony, my bad.

Ну, будут ссылки для публики.

CC>Мой калькулятор внутри все числа представляет в виде дроби. Там нет незапланированных ошибок округления.


Это хорошо до момента вычисления sqrt(3). (Считаем, что я пометил <irony>.)
The God is real, unless declared integer.
Re[5]: Сложение и вычитание в Excel и только
От: T4r4sB Россия  
Дата: 11.02.16 07:59
Оценка:
Здравствуйте, CreatorCray, Вы писали:

CC>Может ты свой неправильно готовишь?


У меня обычный 10-байтовый плавучий, символьную арифметику я не мутил, конечно же.
Потому и результат такой, конечно.
Re[8]: Сложение и вычитание в Excel и только
От: CreatorCray  
Дата: 11.02.16 08:08
Оценка:
Здравствуйте, netch80, Вы писали:

CC>>Мой калькулятор внутри все числа представляет в виде дроби. Там нет незапланированных ошибок округления.

N>Это хорошо до момента вычисления sqrt(3). (Считаем, что я пометил <irony>.)

А его всё равно точно вычислить нельзя по определению.
Просто говорим до какой точности хотим.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[6]: Сложение и вычитание в Excel и только
От: CreatorCray  
Дата: 11.02.16 08:08
Оценка:
Здравствуйте, T4r4sB, Вы писали:

CC>>Может ты свой неправильно готовишь?

TB>У меня обычный 10-байтовый плавучий, символьную арифметику я не мутил, конечно же.
TB>Потому и результат такой, конечно.

Сорри, мне там надо было смайлик дописать, чота как то забыл.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[7]: Сложение и вычитание в Excel и только
От: T4r4sB Россия  
Дата: 11.02.16 09:01
Оценка:
Здравствуйте, CreatorCray, Вы писали:

CC>Сорри, мне там надо было смайлик дописать, чота как то забыл.


Я бы так же ответил бы.
Re: Сложение и вычитание в Excel и только
От: qwertyuiop Российская Империя  
Дата: 11.02.16 09:58
Оценка: +1
Раньше подобные удивленные посты появлялись в С/С++ не реже чем раз в месяц. Сейчас переехали в КСВ?
Я отвечаю за свои слова, а не за то как вы их интерпретируете!
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.