![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Пользователь
Регистрация: 04.03.2013
Сообщений: 79
|
![]()
Здравствуйте, объясните пожалуйста почему при расчете суммы в зависимости от порядка сложения получаются разные результаты?
Код:
S2= 1.64493306684873 |
![]() |
![]() |
![]() |
#2 |
Лис
Старожил
Регистрация: 18.09.2015
Сообщений: 2,409
|
![]()
Потому что в компьютере числа имеет ограниченную длину. Для примера Single.
1.0 Прибавляем 1E-8 Для этого денормируем числа. 1.0000000 0.00000001 Затем складываем 1.0000000 + 0.00000001 ======== 1.00000001 Для записи результата число округляется до размеров Single. 1.0000000 Для Double аналогично просто мне 16 нулей лень писать. Так что запоминаем правило, от перестановки слагаемых сумма меняется.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
У дзен программиста программа делает то что он хотел, а не то что он написал . |
![]() |
![]() |
![]() |
#3 |
Старожил
Регистрация: 02.03.2008
Сообщений: 2,504
|
![]()
Да, это от округления.
PS. В Си выражение 1+1/1000000 конечно не прокатит, там сразу " округлит ", надо 1+1.0/1000000 Но, не в этом суть. Последний раз редактировалось type_Oleg; 29.09.2016 в 22:03. |
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
PHP, тип Double - точность вычислений | vinniepooh | PHP | 25 | 13.01.2016 20:32 |
Расчет контрольной суммы | Demagog | Общие вопросы Delphi | 0 | 24.03.2013 18:49 |
Точность double в c++ | firephenix | Помощь студентам | 0 | 25.10.2011 12:35 |
Точность вычисления | Von | Общие вопросы C/C++ | 2 | 25.01.2011 17:45 |
Long double. Максимальная точность. | juzam | Общие вопросы C/C++ | 2 | 05.10.2010 14:48 |