Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология Образование Политология Производство Психология Стандартизация Технологии |
Деление в прямом коде со сдвигом и автоматическим восстановлением остатка ⇐ ПредыдущаяСтр 4 из 4
Если , то z0 = 0 и и т. д. Пример: +0.100 = [|X|]дк 1.010 = [-|Y|]дк 0.110 = [|Y|]дк 1.010 = [-|Y|]дк 0.110 = [|Y|]дк Ответ: [Z]пк = 1.101 Деление в прямом коде со сдвигом делителя И автоматическим восстановлением остатка
Если , то z0 = 0.
Разрядная сетка (n + d) разрядов, где d = log2n Пример: 1) [X]пк = 1.1001 2) [Y]пк = 1.1011 n = 4, d = 2
Ответ: [Z]пк = 0.1100 Пример:
Ответ: [Z]пк = 1.101 Деление в дополнительном (обратном) кодах со сдвигом И автоматическим восстановлением остатка [X]дк, ок; [Y]дк, ок
Деление в ОК не применяется, так как " 0" в ОК имеет двойное изображение. В первом такте вместо берётся sign X, а вместо берётся [X]дк, ок Пример: [X]дк = 1.0111 [Y]дк = 1.0011 Т.к. sign X = sign Y, то +1.0111 | 1.0011 0.1101 = -[Y]дк ______ 1.0011 = [Y]дк ______ 0.1101 = +[-[Y]дк ]дк ______ 1.0011 = [Y]дк ______ 0.1101 = +[-[Y]дк ]дк ______ Ответ: [Z]дк = 0.1011 Это справедливо при 0 < = [Z]дк = [X]дк / [Y]дк ]| < 1. Если необходимо определить частное |[Z]дк = [X]дк / [Y]дк | | < 2, то поступают так: [X]дк*2-1 / [Y]дк = z0z1z2...zn, z0 – знак, z1 – целая часть числа. Арифметические операции над числами, представленными с плавающей запятой В основе арифметических операций над числами с плавающей запятой лежат принципы, на которых базируются операции над числами с фиксированной запятой. При этом есть и некоторые особенности. Будем условно считать, что порядки заданы в обратном коде, а мантиссы – в прямом. Умножение: X = 2mx * sign X.x1x2...xn Y = 2my * sign Y.y1y2...yn Z = X*Y = 2mx+my * sign Z.z1z2...zn Порядок выполнения операции следующий:
При этом возможны следующие случаи:
Поэтому необходима нормализация влево максимум только на один разряд. С этой целью нужно сдвинуть мантиссу влево на один разряд. Это соответствует умножению числа на 21. Для того чтобы число не увеличилось в два раза, нужно из порядка вычесть единицу.
В данном случае вырабатывается специальный признак, по которому дальнейшие вычисления прекращаются.
Деление В основном аналогично умножению: X = 2mx * sign X.x1x2...xn Y = 2my * sign Y.y1y2...yn Z = X/Y = 2mx–my * sign Z.z1z2...zn Порядок выполнения операции следующий:
вначале находится целая часть мантиссы, то есть Если , если , то z0 = 0. Дробная часть мантиссы находится так же, как при операциях над числами с фиксированной запятой. Такой порядок действий вытекает из того, что: То есть, возможно получение ненормализованной мантиссы. Для нормализации мантиссу необходимо сдвинуть вправо на один разряд и, чтобы не уменьшать при этом результат в два раза, нужно прибавить к порядку одну единицу. При делении, так же, как и при умножении, возможно получение кода машинного нуля и кода бесконечности. Сложение и вычитание Обе операции выполняются по сходным алгоритмам. Операция выполняется следующим образом:
Пример: порядок мантисса [mx]пк = 0.11 [Mx]пк = 0.1010 [my]пк = 0.10 [My]пк = 0.1110 Находим разность порядков: +00.11 = [mx]мок 11.01 = [-my]мок 1| 00.00 |_ _-> 1 00.01 = - разность порядков. Так как m x > my, то: +00.1010 = [Mx]мок 00.0111 = [My]мок * 2-1 [Z]мок = 01.0001 – переполнение 2-1 * [Z]мок = 00.1000 – нормализация max(mx, my) = [mx]мок = +00.11 [1]мок = 00.01 [mx]мок = 01.00 – переполнение порядка Z = . При выполнении операции сложения возможны следующие специфические случаи, называемые блокировками: а) При определении разности порядков может оказаться, что необходимо мантиссу одного из чисел сдвигать на величину, большую, чем число разрядов в разрядной сетке. В этом случае, естественно, такое число может быть воспринято как нуль, а операция дальнейшего сложения может блокироваться, то есть не выполняться. В качестве результата берётся максимальное число. Пример: [mx]ок = 0.101 [Mx]ок = 0.10111101 [my]ок = 1.001 [My]ок = 0.10000001 Разность порядков: +00.101 = [mx]мок 00.110 = [-my]мок – то есть это число 11 10, а в разрядной сетке мантиссы только 8 разрядов. Поэтому операция блокируется, а результатом является число: [mx] = 0.101 [Mx] = 0.10111101 Аналогичный случай может быть, когда разность порядков – отрицательна (отрицательное переполнение). В этом случае операция также блокируется, а результатом будет число с максимальным порядком. Пример: [mx]ок = 1.010 [Mx]ок = 1.10101011 [my]ок = 0.110 [My]ок = 1.11111111 Разность порядков: + 11.010 = [mx]мок 11.001 = [-my]мок _______ +1| 10.011 _______ 10.100 = То есть разность порядков меньше (-8). Операция блокируется, а результатом будет число: [my]ок = 0.110 [My]ок = 1.11111111 |
Последнее изменение этой страницы: 2017-03-15; Просмотров: 668; Нарушение авторского права страницы