Особенности алгоритмов умножения дополнительных кодов
В компьютере целые числа хранятся в дополнительных кодах. Поэтому и произведение должно быть представлено в дополнительном коде. Понятно, что преобразование дополнительных кодов сомножителей в их прямые коды и преобразование вычисленного прямого кода произведения в его дополнительный код требуют дополнительных затрат процессорного времени, что увеличивает время выполнения операции умножения. Поэтому желательно вычислять произведение, используя исходные дополнительные коды сомножителей без их преобразования к прямым кодам. Существуют соответствующие алгоритмы. Кратко рассмотрим некоторые особенности таких алгоритмов.
Пусть множитель B – число положительное. Поскольку умножение представляет собой операцию, заменяющую многократные сложения, а сумма дополнительный кодов дает дополнительный код суммы, то произведение кодов A-ДК ´ B+ДК даст дополнительный код произведения.
Сложней вычислить произведение перемножением дополнительных кодов двух отрицательных сомножителей. Действительно, пусть заданы дополнительные коды отрицательных сомножителей A-ДК и B-ДК. Тогда
A-ДК ´ B-ДК =(2E -ô А ô)´(2E -ô B ô)= 4E2-2E (ô А ô+ô B ô)+ô А ô´ô B ô, (6.14)
где E – числовой эквивалент 1 знакового разряда.
Слагаемое 4E2-2E (ô А ô+ô B ô) в (6.14) представляется кодом, у которого все цифры в пределах исходной РС сомножителей равны 0. Поэтому, если РС для представления произведения совпадает с РС сомножителей, то в коде рассматриваемого слагаемого все отличные от 0 цифры находятся левее РС и поэтому оказываются отброшенными. При этом в пределах исходной РС сомножителей остается код, задающий слагаемое ô А ô´ô B ô, то есть искомый код произведения.
|
|
Рассмотрим соответствующий пример.
Вычислим произведение перемножением дополнительных кодов сомножителей.
Пусть n= 8. Тогда 2 E =28=256. Пусть А = -1210; B= -910. Тогда A -ДК = 256 – 12 = 24410; B -ДК = 256 – 9 = 24710.
A- ДК´ B- ДК = 24410 ´24710 = 6026810 = 11101011 01101100 2
Младший байт в полученном коде (выделен полужирным шрифтом) задает число 011011002 = 10810.= (-12) ´ (-9). Таким образом, искомое произведение вычислено.
Рассмотренный пример в сочетании с (6.14) показывает, что при перемножении дополнительных кодов отрицательных сомножителей возникает проблема, если произведение представляется на РС удвоенной длины по сравнению с РС для представления сомножителей. Проблема связана с наличием слагаемого 4E2-2E (ô А ô+ô B ô) в (6.14), которое в рассмотренном примере задается кодом 11101011 00000000 2. Как видно, в рассматриваемом случае вычисленное произведение дополнительных кодов необходимо скорректировать, чтобы старший байт произведения стал равен нулю. При этом «обнуление» старшего байта его маскированием недопустимо, так как он в общем случае не должен равняться 0, если перемножаются числа большие по модулю, чем рассмотрено в примере. Корректировка должна состоять в прибавлении к вычисленному произведению слагаемого 2E (ô А ô+ô B ô) =(ô А ô+ô B ô)´ 2n = Ln (ô А ô+ô B ô). Такую корректировку кода, вычисленного в последнем примере, выполните самостоятельно.
|
|
6.6. Алгоритмы деления чисел
с фиксированным положением позиционной точки
Дата добавления: 2016-01-04; просмотров: 17; Мы поможем в написании вашей работы! |
Мы поможем в написании ваших работ!