Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Элементы прикладной теории цифровых автоматов.doc
Скачиваний:
37
Добавлен:
22.09.2019
Размер:
3.88 Mб
Скачать

2.5.3. Деление дополнительных кодов чисел

Деление чисел, представленных в дополнительном коде, выполняется в три этапа.

На первом этапе вычисляется знак частного как результат сложения по модулю 2 знаков операндов.

На втором этапе производится операция проверки на возможность деления (на денормализацию частного влево) путем алгебраического сложения делимого с делителем, которому приписывается знак, противоположный знаку делимого. При этом если делимое положительное, то цифра частного, оказывающаяся в знаковом разряде, определяется инверсией знакового разряда сумматора. Если делимое отрицательное, то текущая цифра частного равна прямому значению знакового разряда сумматора.

На третьем этапе выполняются n циклов деления по обычному алгоритму с некоторыми отличиями, заключающимися в том, что при отрицательном делителе цифры частного формируются равными прямому значению знакового разряда очередного частичного остатка. При этом частное получается в обратном коде. Кроме n основных циклов, обязательно вычисление -й цифры частного в дополнительном цикле, поскольку в дальнейшем нормализованное при необходимости частное поступает на сумматор, где к -му разряду добавляется единица для округления и перевода частного из обратного кода в дополнительный.

Читателю предлагается самостоятельно разобрать примеры, взяв в качестве операндов мантиссы из предыдущих примеров. При этом следует помнить, что отрицательные операнды должны быть представлены в дополнительном коде.

Пример.

[А]д = 0,101;

[В]д = 1,010;

С = А/В.

ЗнС = ЗнА  ЗнВ = 0  1 = 1.

0 .

Поскольку делимое положительное, переполнения разрядной сетки не произойдет (в младший разряд регистра частного заносится инверсия знака сумматора).

Так как делитель отрицательный, цифры частного будут определяться прямыми значениями знакового разряда сумматора.

1.

2.

3.

4.

Округление и преобразование в дополнительный код.

5. ;

Таким образом, [С]д = 1,001.

В прямом коде результат запишется как [С]пр = 1,111.

2.6. Извлечение квадратного корня

Операция извлечения квадратного корня включается в совокупность арифметических операций ЭВМ в том случае, когда она составляет не менее 2 % от общего числа операций или является составной частью специализированных алгоритмов, выполняемых с высоким быстродействием. В противном случае квадратный корень можно извлекать итеративно, например, по формуле Герона.

Процедура извлечения квадратного корня сводится к процедуре деления, при этом делитель в каждом цикле формируется из полученных на предыдущем этапе цифр частного путем приписывания к частному некоторой двоичной комбинации.

В общем случае извлечение квадратного корня из числа, представленного с плавающей запятой, осуществляется в два этапа. На первом этапе формируется порядок результата, а на втором – мантисса.

Для определения порядка результата порядок исходного операнда следует разделить на 2. Если порядок подкоренного числа четный, то деление на 2 выполняется путем сдвига его кода вправо на один двоичный разряд (отрицательный порядок должен быть представлен инверсным кодом). Если порядок нечетный, то перед делением на 2 его значение следует увеличить на единицу, что повлечет за собой необходимость денормализовать мантиссу. Таким образом, при нечетном порядке к его значению в первом такте прибавляют 1, а во втором такте одновременно сдвигают мантиссу и увеличенное значение порядка на один разряд вправо. При четном или нечетном порядке операнда результат выполнения операции все равно будет получаться нормализованным.

Как и в случае деления, квадратный корень можно извлекать с восстановлением и без восстановления остатка. При этом результат всегда будет получаться с недостачей, поэтому необходимо вычислять дополнительную цифру и производить округление.

Рассмотрим сначала метод извлечения квадратного корня с восстановлением остатка.

Для получения цифр корня следует выполнить циклов, каждый из которых распадается на три такта. В первом такте из содержимого сумматора, т.е. из очередного частичного остатка, вычитается делитель, сформированный из уже полученных цифр частного и приписки «01». Очевидно, что в первом цикле делитель представляет собой число «0,01». Во втором такте в случае отрицательного сумматора требуется процедура восстановления остатка путем прибавления к сумматору положительного делителя. В третьем такте формируется очередная (начиная со старшей) цифра корня, равная нулю, если в первом такте сумматор оказался отрицательным, или единице, если в первом такте сумматор оказался положительным. В этом же такте выполняется сдвиг очередного частичного остатка на один разряд влево. По окончании выполнения операции производится округление результата.

Пример.

1. Определение порядка результата.

PB = PA/2:

Таким образом, порядок результата PB = 0,010.

2. Определение мантиссы.

1 . -

2 . -

+

3 . -

4 . -

+

(окончание примера на следующей странице)

5 . -

+

6 . -

+

Окр.

Окончательно

Извлечение квадратного корня без восстановления остатка является модификацией предыдущего алгоритма. В каждом цикле выполняются два такта. В первом такте в зависимости от знака сумматора выполняется арифметическая операция. Если сумматор положительный, то из него вычитается делитель. Если сумматор отрицательный, то, наоборот, к нему прибавляется положительный делитель. Во втором такте анализируется знак очередного остатка. Если остаток положительный, то очередная цифра частного – единица и приписка к частному для формирования делителя «01». В противном случае очередная цифра частного – нуль и приписка к частному для формирования делителя «11». Одновременно с формированием частного и переменного делителя выполняется удвоение очередного частичного остатка. При этом знаковый разряд может быть искажен, поэтому для сохранения знака следует использовать модифицированный код.

Пример.

Рассмотрим число из предыдущего примера.

1 . -

(окончание примера на следующей странице)

2 . -

3 . +

4 . -

5. +

6 . +

Окр.

Окончательно