- •Содержание
- •Часть I. Арифметика в форматах с фиксированной точкой
- •1. Введение
- •Место и роль Арифметики цифровых вычислительных машин в современной науке
- •Предмет и предназначение настоящей книги
- •Рекомендации читателю
- •Раздел 2 достаточно просмотреть, быстро переворачивая страницы.
- •Позиционные системы счисления
- •Двоичная, восьмеричная, шестнадцатеричная и двоично-кодированные системы счисления
- •Преобразование чисел из десятичной в двоичную, восьмеричную и шестнадцатеричную системы счисления и наоборот
- •Представление чисел в форматах с фиксированной точкой
- •Формат с фиксированной точкой
- •Свойства формата с фиксированной точкой
- •Ограниченный диапазон представления чисел
- •Точность действительного числа в формате и точность формата
- •Значимость числа и потеря значимости
- •Эффективность использования двоичного формата
- •Представление чисел в прямом, обратном и дополнительном кодах
- •Взаимное преобразование прямого, обратного и дополнительного кодов
- •Взаимное преобразование прямого и обратного кодов отрицательных чисел
- •Взаимное преобразование обратного и дополнительного кодов отрицательных чисел
- •Взаимное преобразование прямого и дополнительного кодов отрицательных чисел
- •Запись кода числа в формат с фиксированной точкой
- •Функции системы записи и исключительные ситуации
- •Округление действительных чисел
- •Округление кодов действительных чисел с записью в формат с фиксированной точкой
- •Округление прямого кода числа
- •Округление обратного и дополнительного кодов положительного числа
- •Округление обратного кода отрицательного числа
- •Округление дополнительного кода отрицательного числа
- •Арифметические операции в форматах с фиксированной точкой
- •Операция пересылки
- •Операция изменения знака
- •Операции алгебраического сложения и вычитания
- •Сложение в дополнительном коде
- •Вычитание в дополнительном коде
- •Особенности сложения и вычитания в дополнительном коде
- •Сложение в обратном коде
- •Вычитание в обратном коде
- •Особенности сложения и вычитания в обратном коде
- •Взаимная замена операций вычитания и сложения
- •Сложение и вычитание в прямом коде
- •Операция алгебраического умножения
- •Умножение в прямом коде
- •Умножение в дополнительном коде
- •Умножение с преобразованием операндов в прямой код и произведения в дополнительный
- •Умножение дополнительного кода множимого на модуль множителя
- •Умножение дополнительного кода множимого на дополнительный код множителя
- •Умножение множимого в традиционной двоичной системе на множитель, представленный в двоичной системе счисления с алфавитом
- •Умножение дополнительных кодов с заменой знакового разряда множителя 1 на
- •Преобразование множителя с заменой цепочек единиц нулями
- •Преобразование множителя с сокращением вдвое верхней оценки количества единиц
- •Умножение на два разряда с переносом 1 в очередную двойку разрядов множителя
- •Умножение на два разряда с преобразованием множителя заменой цепочек единиц нулями
- •Умножение на два разряда множителя с увеличенным количеством нулевых частных произведений
- •Изменение операции над частным произведением
- •Вычисление частного произведения с требуемым знаком
- •Сокращение матриц дополнительных кодов частных произведений
- •Табличный способ умножения
- •Умножение чисел большой разрядности
- •Операции алгебраического деления и вычисления остатка
- •Математические основы некоторых способов деления двоичных чисел
- •Деление двоичных чисел в прямом коде
- •Деление с восстановлением остатка
- •Деление без восстановления остатка
- •Деление с вычислением очередного сдвинутого влево остатка
- •Деление без записи очередного остатка на место предыдущего
- •Деление двоичных чисел в дополнительном коде
- •Деление нормализованных двоичных чисел
- •Некоторые способы ускорения деления
- •Операция сравнение
- •Выполнение операций в двоично-десятичной системе счисления
- •Вычисление двоично-десятичного кода обратной десятичной цифры
- •Взаимные преобразования прямого, обратного и дополнительного кода двоично-десятичного числа
- •Изменение знака двоично-десятичных чисел
- •Сложение двоично-десятичных чисел
- •Сложение в двоично-десятичной системе 8421
- •Вычитание двоично-десятичных чисел
- •Литература
Округление действительных чисел
Округление
действительного числа
выполняется, если количество разрядов
в его дробной части превышает требуемое.
Если значение сокращаемых младших
разрядов исходного числа равно нулю,
их просто отбрасывают. Значение числа
не изменяется, результат округления
точный. Если значение сокращаемых
разрядов не равно нулю, исходное точное
число
заменяют одним из двух ближайших к нему
чисел с требуемой разрядностью. Результат
округления приближенное число
,
где
и
– числа с требуемой разрядностью
ближайшие к
.
Если количественный эквивалент исходного числа (будем считать его точным)
(3-18)
где
– код знака числа;
– цифра в разряде
i;
m – индекс младшего разряда;
k – индекс младшего разряда результата округления;
то количественные эквиваленты ближайших к нему чисел
(3-19)
(3-20)
Из
сопоставления (3-18) с (3-19) и (3-20) следует,
что значение
можно вычислить простым отбрасыванием
в
сокращаемых разрядов, а значение
– прибавлением к
единицы с весом младшего сохраняемого
разряда, что сделать существенно сложнее.
Возможность выбора одного из двух ближайших чисел порождает многовариантность методов округления. Методы округления можно разбить на две группы.
Направленные округления.
Округления до ближайшего числа.
Направленные
округления.
На числовой оси исходному числу
соответствует точка, размещенная на
отрезке между точками соответствующими
числам
и
.
При округлении переменной
происходит замещение ее значения
числами
или
.
При этом значение переменной x
смещается на числовой оси вправо или
влево, и, это то же самое, – в
направлении к
или к
.
Если
принадлежит положительной полуоси
рис.3-7a,
то смещение влево направлено
к точке ноль,
а смещение вправо – в сторону
от точки ноль.
Если точка
размещена на отрицательной полуоси
рис.3-7b,
то напротив – смещение вправо направлено
к нулю, а
влево – от
нуля. Такая
интерпретация округления определяет
4 варианта направленного округления:
к нулю;
от нуля;
к ;
к .
При округлении к нулю из двух чисел ближайших к выбирают ближайшее к нулю.
П
ри
округлении
от нуля из
двух ближайших чисел к
выбирают расположенное дальше от нуля.
При округлении к (до ближайшего большего или по избытку) из двух чисел ближайших к выбирают число расположенное справа.
При округлении к (до ближайшего меньшего или по недостатку) из двух чисел ближайших к выбирают расположенное слева.
Округление к нулю достигается простым отбрасыванием сокращаемых разрядов исходного числа (3-19).
Округление от нуля реализуется отбрасыванием сокращаемых разрядов и увеличением значения сохраняемых разрядов на 1 с весом младшего сохраняемого разряда (3-20).
При округлении к
сокращаемые разряды отбрасывают, и,
если
,
значение сохраняемых разрядов увеличивают
на 1 с весом младшего сохраняемого
разряда.
При округлении к
сокращаемые разряды отбрасывают, и,
если
,
значение сохраняемых разрядов увеличивают
на 1 с весом младшего сохраняемого
разряда.
Округления до ближайшего числа. При всех вариантах округления до ближайшего числа из двойки , выбирают то число, которое расположено на числовой оси ближе к округляемому числу . Если число находится точно посередине между числами и , то округление выполняют по специальным правилам. Множество вариантов специальных правил определяет множество вариантов способов округления до ближайшего числа, которое можно разбить на две группы: детерминированные и вероятностные.
При детерминированном округлении одно и то же значение всегда округляется до одного и того же значения N.
При вероятностном округлении одно и то же значение может быть округлено до разных значений или с некоторой вероятностью.
Варианты детерминированного округления. Если число находится точно посередине между числами и , то его округляют
ближайшим четным;
ближайшим нечетным;
к нулю;
от нуля;
к ;
к .
Варианты вероятностного округления. Если число находится точно посередине между числами и , выполняют
случайное округление – в большую или меньшую сторону с равной вероятностью;
чередующееся округление – в большую или меньшую сторону поочередно.
Табл.3.2 и табл.3.3 иллюстрируют способы округления.
Таблица 3.2
-
Исходное
число
Результат направленного округления
К нулю
От нуля
К
К
+43,6457
+43,64
+43,65
+43,65
+43,64
+43,6450
+43,64
+43,65
+43,65
+43,64
+43,6420
+43,64
+43,65
+43,65
+43,64
+43,6400
+43,64
+43,64
+43,64
+43,64
±00,0000
±00,00
±00,00
±00,00
±00,00
–43,6400
–43,64
–43,64
–43,64
–43,64
–43,6420
–43,64
–43,65
–43,64
–43,65
–43,6450
–43,64
–43,65
–43,64
–43,65
–43,6457
–43,64
–43,65
–43,64
–43,65
Исходное десятичное
число
с четырьмя разрядами после запятой
округляется до двух разрядов после
запятой.
Таблица 3.3
Исходное число
|
Результат округления до ближайшего числа |
|||||
Четного |
Нечетного |
К нулю |
От нуля |
К |
К |
|
+43,6457 |
+43,65 |
+43,65 |
+43,65 |
+43,65 |
+43,65 |
+43,65 |
+43,6450 |
+43,64 |
+43,65 |
+43,64 |
+43,65 |
+43,65 |
+43,64 |
+43,6420 |
+43,64 |
+43,64 |
+43,64 |
+43,64 |
+43,64 |
+43,64 |
+43,6400 |
+43,64 |
+43,64 |
+43,64 |
+43,64 |
+43,64 |
+43,64 |
±00,0000 |
±00,00 |
±00,00 |
±00,00 |
±00,00 |
±00,00 |
±00,00 |
–43,6400 |
–43,64 |
–43,64 |
–43,64 |
–43,64 |
–43,64 |
–43,64 |
–43,6420 |
–43,64 |
–43,64 |
–43,64 |
–43,64 |
–43,64 |
–43,64 |
–43,6450 |
–43,64 |
–43,65 |
–43,64 |
–43,65 |
–43,64 |
–43,65 |
–43,6457 |
–43,65 |
–43,65 |
–43,65 |
–43,65 |
–43,65 |
–43,65 |
+43,6350 |
+43,64 |
+43,63 |
+43,63 |
+43,64 |
+43,64 |
+43,63 |
–43,6350 |
–43,64 |
–43,63 |
–43,63 |
–43,64 |
–43,63 |
–43,64 |
Заметим, что число в позиционных системах счисления с нечетным основанием P (например, при P = 3), и конечной разрядностью не может находиться точно посередине между числами и , что упрощает метод округления до ближайшего числа и делает его одновариантным.
Здесь приведены не все возможные варианты округления. Например, в [3] определены округления без распространения переноса.
Выбор метода
округления определяется целью округления,
семантикой округляемой величины,
сложностью
вычисления
результата округления и параметрами
характеризующими результат округления.
В качестве параметров используются
максимальная величина модуля абсолютной
погрешности
,
математическое
ожидание погрешности округления
,
дисперсия погрешности округления D,
относительная погрешность округления
.
В [3] описан подход к определению параметров
и определены параметры девяти,
рассматриваемых в [3], методов округления.
Абсолютная погрешность округления
. (3-21)
Если
,
то из (3-19) и (3-20) следует, что
. (3-22)
Если
,
то из (3-19) и (3-21) следует, что
. (3-23)
Знак абсолютной погрешности зависит от знака числа и от значения N.
При направленном округлении
(3-24)
не превышает веса младшего разряда округленного числа N. Предельная относительная погрешность округления, выраженная в процентах
(3-25)
Ее
знак определяется знаком
.
При
относительная погрешность теряет смысл.
При округлении до ближайшего числа
(3-26)
и случается когда N равноудалено от и . Предельная относительная погрешность округления
(3-27)
Погрешности при округлении до ближайшего числа почти вдвое меньше чем при направленных округлениях, поэтому округления до ближайшего числа предпочтительны. Однако это не исключает применение направленных округлений. В некоторых случаях без направленных округлений нельзя обойтись. Например, пусть Вы вычисляете количество землекопов, которых необходимо нанять для рытья траншеи с завершением работы к 12 часам послезавтра и получаете в ответе 3,2. Но количество землекопов должно быть числом целым, а поэтому результат нужно округлить. Если округлить до ближайшего числа получим 3 и решим задачу неправильно, так как 3 землекопа не успеют вырыть траншею к заданному времени. Очевидно, что следует применить направленное округление к или от нуля. Результат будет 4. В первом случае погрешность округления 0,2, а во втором – 0,8.
Систематическое округление промежуточных результатов к нулю приводит к занижению результатов вычислений.
Систематическое округление промежуточных результатов от нуля приводит к завышению результатов вычислений.
При округлении к знак погрешности всегда отрицательный.
При округлении к знак погрешности всегда положительный.
Способы округления
до
и
применяют при реализации методов
вычислений получившей название Арифметика
интервалов
[5,6,7]. Если какая-либо граница интервала,
которому принадлежит точное значение,
не может быть представлена в данном
формате, ее значение округляют до
(верхнюю границу) или до
(нижнюю границу), чтобы точное значение
не могло выйти за границы интервала
из-за ошибки округления. Разработано
множество способов, позволяющих
формировать достаточно узкие интервалы
результатов вычислений и, следовательно,
получать высокую точность результата.
Стандарт IEEE 754 1985г “Двоичная арифметика с плавающей точкой” [10] рекомендует применять в системах четыре варианта округления:
к нулю;
к ;
к ;
до ближайшего числа и, если округляемое число точно посередине, то выбирать ближайшее четное.
Стандарт IEEE 754 редакции 2008г [11] расширяет перечень вариантов округления, рекомендуя дополнительно применять округление до ближайшего числа и, если округляемое число точно посередине, выбирать отстоящее дальше от нуля.
Детальная оценка способов округления и методология выбора способа округления являются предметом вычислительной математики, а не арифметики. В последующих подразделах рассматриваются правила округления кодов чисел.
