Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Форматы файлов и данных > Глюки при сложении float'ов |
Автор: sergejzr 19.11.2004, 19:37 | ||
Вопрос 1:
Для начала примем во внимание, что память компьютера ограничена, а значит, мы должны с самого начала определить интервал чисел, с которыми будем работать. Предположим, что у нас 32 бит. Значит, мы можем представить 2^32 различных комбинаций или чисел. Выбираем интервал от х до х+2^32 и спокойно работаем ![]() Теперь берём float. Бит так же, 32, но интервал 32 битного флоата почему-то кажется нам намного больше.. Вопрос 2: Сколько чисел в интервале от 1 до 2? Ответ 2: Целых чисел там нет. Зато бесконечное количество дробных. Вопрос 3: Но ведь мы сказали, что память компьютера ограничена. Каким образом тогда можно представить бесконечное количество? Ведь у нас всего 2^32 комбинаций! Ответ 3: Конечно никаким! Теперь понятно, что все дробные числа мы просто не в состоянии представить в нашей "ограниченной" памяти, какой бы интервал мы не взяли. Вот и происходят странные ошибки при сложении. Откуда-то берутся .000000000001 и тому подобное ![]() Мы можем аппроксимировать желания юзера ![]() Здесь вводится понятие "точность". То есть в интервале, например от 0 до 1 компьютер работает точнее, чем в интервале 9999998 до 9999999. Хотя интервал и там 1 и тут 1 ![]() А вот теперь пришло время рассмотреть, каким образом удаётся этого добиться. См:http://sizov.by.ru/pubs/float.shtml Вопрос 4: А как это лечить? Ответ 4: К сож. это не лечится. ---------------------------------------------------------- ПС: Прошу, дополнять, исправлять , немного ругать ![]() Если посчитаете тему ненужной, я её сотру ![]() Сергей. |
Автор: podval 19.11.2004, 22:24 |
Тема перенесена из раздела "Алгоритмы". |
Автор: val 22.11.2004, 10:54 |
Проблема, уважаемые коллеги имеенно в двоичной системе представления чисел. Некоторые конечные дроби в одной системе счисления представляются бесконечными в другой. Вот он, корень зла... ![]() |
Автор: sergejzr 22.11.2004, 14:57 | ||
Хорошее дополнение ![]() Это тоже один из факторов невозможности точного представления некоторых чисел в компьютерной памяти. Спасибо ![]() |
Автор: val 22.11.2004, 19:06 | ||
Не за что... ![]() |
Автор: ТарасАтавин 30.11.2013, 16:38 |
Столько текста вместо простого и понятного объяснения, что такое машинный эпсилон, на которое хватило бы и минуты. |