Re: Округление к ближайшему
- From
- Michael Ryazanov (2:5030/1006.64)
- To
- Max Alekseyev
- Date
- 2002-10-13T20:51Z
- Area
- RU.ALGORITHMS
▐┤E╚°' Max!
08.10 14:42 Max Alekseyev, 2:5015/60 -> Vlad Golubev
MA> Процитирую соответствующий параграф из "Аппроксиметрики" В.М.Юровицкого:
MA> http://yur.ru/science/computer/appro/monografia.htm
MA> ===cut===
MA> 1.4.1. Округление приближенного числа
MA> Важнейшей операцией в классической системе обработки приближенных чисел является
MA> операция округления, т.е. переход от данного числа к некоему связанному с ним, но
MA> менее точному, с меньшим числом значащих разрядов. Округление на один разряд
MA> сводится к превращению последнего значащего разряда в незначащий (отбрасывание или
MA> замена незначащим нулем). Если отбрасываемый разряд меньше 5, то больше ничего не
MA> делается (округление с недостатком), а если отбрасываемый разряд превышает 5, то
MA> предшествующий значащий разряд увеличивается на единицу (округление с избытком).
MA> Если же округляемый разряд равен 5, то действует правило: четный предшествующий
MA> разряд не изменяется, а нечетный увеличивается на единицу.
MA> Если операцию округления обозначим через Q, то легко видеть, что Q(123'00)=12'000,
MA> Q(0.3456')=0.346', Q(22.5')=22', Q(11.995')=12.00'.
MA> Важным свойством округления в классической теории приближенных чисел является
MA> равновероятность округления в любую сторону - как с избытком, так и с недостатком.
MA> Казалось бы, мы имеем очень простую и естественную систему округления. Увы,
MA> компьютерная техника так до сих пор и не смогла освоить этот алгоритм
MA> округления.
MA> ===cut===
Автор либо писал это в незапамятном году, либо совершенно не знаком с вопросом. Вот цитата из документации к процессору i486:
15.2.3 Управление округлением
Во внутреннем представлении модуль обработки операций с плавающей точкой
процессора i486 использует три дополнительных бита (бит защиты, бит
округления и бит подклейки), которые применяются для округления чисел в
соответствии с истинным результатом бесконечной точности вычислений. Эти
биты не доступны для программиста. Всегда, когда адресат может представить
истинный результат бесконечной точности, модулю обработки операций с
плавающей точкой не надо производить округление. Округление производится в
арифметических операциях и операциях сохранения, когда формат адресата не
может точно представить истинный результат с бесконечной точностью.
Например, вещественное число может быть округлено, если оно сохраняется в
более коротком вещественном формате или в целочисленном формате. Истинный
результат бесконечной точности также может быть округлен при занесении в
регистр.
Модуль обработки операций с плавающей точкой процессора i486 имеет четыре
режима округления, устанавливаемые в поле управления округлением (RC)
управляющего слова (смотрите Рисунок 15-3). По данному истинному
результату b, который не может быть представлен нужным типом данных,
модуль обработки операций с плавающей точкой определяет два представимых
числа a и c, которые наиболее точно подходят к значению числа b с двух
сторон (a < b < c). Затем процессор округляет (изменяет) b на a или c в
соответствии с режимом, установленном в поле округления, как показано в
Таблице 15-5. Округление вносит в результат ошибку, которая не больше чем
единица в разряде, по которому велось округление.
Таблица 15-5. Режимы Округления
┌───────────┬──────────────┬────────────────────────────────────┐
│Поле Управ-│ Режим │ │
│ленеия Окру│ Округления │ Действия при Округлении │
│глением │ │ │
├───────────┼──────────────┼────────────────────────────────────┤
│ 00 │Округление до │ Определяем, к чему ближе b: к a или│
│ │ближайшего │ c; если число равноудалено от этих │
│ │ │ чисел, то выбор четного числа (то, │
│ │ │ у которого наименьший значащий бит │
│ │ │ нулевой). │
├───────────┼──────────────┼────────────────────────────────────┤
│ 01 │ Округление │ │
│ │ снизу │ a │
│ │ (до -x) │ │
├───────────┼──────────────┼────────────────────────────────────┤
│ 10 │ Округление │ │
│ │ сверху │ c │
│ │ (до +x) │ │
├───────────┼──────────────┼────────────────────────────────────┤
│ 11 │ Отсечение │ Наименьшее из a или c │
│ │ (до 0) │ │
└───────────┴──────────────┴────────────────────────────────────┘
ОБРАТИТЕ ВНИМАНИЕ: a < b < c; a и c - успешно представимые числа; b - не
представимо.
- "Округление до ближайшего" - этот режим устанавливается по умолчанию и
применим ко многим программным продуктам; он предоставляет наибольшую
точность и статистически несмещенную оценку истинного результата.
- Режим "отсечения" или "округления до нуля" применим к целочисленным
арифметическим операциям.
- "Округление в большую сторону" и "округление в меньшую сторону"
называются ориентированным округлением и могут быть использованы для
реализации интервальной арифметики. Интервальная арифметика используется
для определения верхней и нижней границы для истинного результата
многоступенчатых расчетов при округлении промежуточных результатов
вычислений.
Управление округлением применимо только к арифметическим операциям (список
арифметических и неарифметических команд приведен в Главе 16).
И всё это является *стандартом*:
Возможности процессора i486 включают в себя:
<...>
- Встроенный модуль обработки арифметических операций с плавающей точкой для
поддержки 32, 64, и 80-разрядных форматов, заданных в соответствие со
стандартом IEEE 754 (объектно совместимом с 387 (TM) DX и 387 SX
арифметическими сопроцессорами);
|V|uxau/\
--- -- - ·
* Origin: Ф И З Ф А К - Ч Е М П И О H ! (2:5030/1006.64)