![]() |
|
Модераторы: bsa |
![]()
|
|
| Ares4322 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 339 Регистрация: 25.9.2007 Где: Россия, Москва Репутация: нет Всего: 3 |
Доброго времени суток!
Есть отсортированный по возрастанию набор float-ов. Если их суммировать от большего к меньшему, то точность суммы будет больше, чем от меньшего к большему. Если же делать то же самое для doublе-ов, то точность не изменяется. Почему так происходит? |
|||
|
||||
| Ares4322 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 339 Регистрация: 25.9.2007 Где: Россия, Москва Репутация: нет Всего: 3 |
Немного неправильно написал условия. Приведу лучше код программы
Это сообщение отредактировал(а) Ares4322 - 7.9.2011, 12:43 |
|||
|
||||
| boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 20 Всего: 110 |
потому что я вам ответил в вашей прошлой теме. для стабильной и управляемой и одновременно переносимой(ОС/компилер) точности, используют библиотеки типа GMP. |
|||
|
||||
| Ares4322 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 339 Регистрация: 25.9.2007 Где: Россия, Москва Репутация: нет Всего: 3 |
Я понял, что нужно использовать GMP)
Но все-таки, почему при обратном проходе цикла в приведенный выше программе точность для float-ов выше? |
|||
|
||||
| Void |
|
|||
![]() λcat.lolcat ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2206 Регистрация: 16.11.2004 Где: Zürich Репутация: 2 Всего: 173 |
Максимальная точность сложения достигается когда значения операндов близки друг к другу, точнее, имеют одинаковую экспоненту. Это очевидно из представления чисел с плавающей точкой: операнды необходимо привести к одной экспоненте перед выполнением операции. При сложении большого числа с малым младшие разряды последнего теряются при таком приведении. Поэтому точность суммы от меньших к большим будет выше.
Если вывести все 15 значащих цифр после запятой, то видно, что изменяется. Это сообщение отредактировал(а) Void - 7.9.2011, 14:20 -------------------- “Coming back to where you started is not the same as never leaving.” — Terry Pratchett |
|||
|
||||
![]()
|
| Правила форума "C/C++: Для новичков" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |