
- •1.4. Алфавитное представление и преобразование информации
- •Глава 2
- •2.1. Непозиционные системы счисления
- •2.2. Позиционные системы счисления
- •Неоднородные позиционные системы счисления
- •Однородные позиционные системы счисления
- •2.3. Кодированные позиционные системы счисления
- •2.4. Системы счисления специального назначения
- •2.6. Символические системы счисления
- •2.7. Перевод чисел из одной системы счисления в другую
- •Перевод целых чисел из одной позиционной системы счисления в другую
- •2.8. Выбор системы счисления для применения эвм
- •2.9. Двоичная система счисления
- •2.10. Представление двоичных чисел в эвм
- •2.11. Точность представления чисел в эвм
- •Глава 3
- •3.1. Основные понятия
- •3.2. Операция алгебраического сложения в эвм
- •3.3. Операция сдвига
- •3.4. Сложение чисел в машинах с плавающей запятой
- •8.5. Округление чисел в эвм
- •3.6. Точность выполнения операций в машине с плавающей запятой
- •3.7. Вычисления с двойной точностью
- •Глава 4
- •4.1. Общие сведения об операции умножения
- •4.2. Умножение, выполняемое методом накопления частичных произведений
- •4.3. Сравнение схем умножения методом накопления
- •4.4. Методы ускорения операции умножения
- •4.5. Умножение чисел, заданных в дополнительном коде
- •4.6. Умножение чисел в машинах с плавающей запятой
- •4.7. Особенности выполнения операции умножения в современных эвм
- •4.8. Деление чисел с восстановлением остатков
- •4. 9. Деление без восстановления остатков
- •4.10. Машинные схемы деления
- •4.11. Деление чисел в дополнительном коде
- •4.13. Деление чисел в машинах с плавающей запятой
- •Глава 6
- •6.1. Сложение в прямых д-кодах
- •6.2. Сложение чисел в инверсных д-кодах
- •Для кода д2
- •6.3. Сдвиг д-кодов
- •6.4. Умножение чисел в д-кодах
- •6.5. Деление чисел в д-кодах
- •6.6. Перевод чисел в д-кодах
4.3. Сравнение схем умножения методом накопления
Анализ приведенных схем умножения показывает, что:
длительность процесса умножения по любой схеме составляет п циклов:
Однако длительность циклов в разных схемах неодинакова. Так, во второй и четвертой схемах тц = тсм и, учитывая, что тсм > тсдв эти схемы позволяют ускорить процесс выполнения операции умножения за счет совмещения операции сложения частичных произведений и сдвигов множимого;
2) по количеству оборудования предпочтение следует отдать первой, а потом третьей схеме умножения. Однако с учетом того что обычно требуется n-разрядный результат, схема 4, как уже отмечалось, может быть также значительно упрощена;
3) схемы 3 и 4 легче приспособить для выполнения операции деления;
4) схемы 2 и 4 позволяют не устанавливать СМ в 0 перед выполнением следующей операции, что удобно для исключения промежуточных пересылок в случае, когда произведение А x В нужно прибавить к числу, ранее вычисленному на сумматоре или наоборот.
На основании вышеизложенного можно заключить, что наиболее удобными для применения в ЭВМ являются 1- и 4-я схемы умножения, что подтверждается практикой разработки вычислительных устройств.
4.4. Методы ускорения операции умножения
Любое ускорение операции умножения даже ценой усложнения арифметических и логических схем позволяет существенно повысить быстродействие ЭВМ, так как примерно 70 % своего времени они затрачивают на выполнение этой операции.
Известны способы ускорения умножения, направленные на сокращение общего количества и времени выполнения операций сложения, необходимых для образования произведения. Эти способы делятся на логические и аппаратные.
Под аппаратными понимают такие способы, которые требуют для своей реализации введения дополнительного оборудования в основные арифметические цепи, благодаря чему достигается совмещение во времени отдельных составных частей процесса умножения: Они подразделяются на способы 1-го и 2-го порядка в зависимости от требуемого объема дополнительного оборудования. Для реализации способов первого порядка необходимо количество оборудования, пропорциональное числу разрядов машинного слова п. Для реализации способов второго порядка требуется объем дополнительного оборудования, пропорциональный п2.
Под логическими понимают такие способы ускорения, при реализации которых сохраняется без каких-либо изменений основная
структура арифметических цепей умножителя, а ускорение достигается только за счет усложнения схемы управления.
Простейшим логическим способом является пропуск тактов суммирования в тех случаях, когда очередная цифра множителя равна 0. Если обозначить через q1 количество единиц в некотором множитетели, а через q0 — количество нулей, то для четырех способов умножения методом накопления будут справедливы следующие соотношения;
В среднем количество сложений при этом сокращается вдвое.
Можно уменьшить и среднее, и максимальное количество суммирований при использовании как прямых, так и инверсных передач множимого в сумматор. Здесь учитывается то обстоятельство, что время умножения значительно сокращается, если при наличии в разрядах множителя цепочки нулей подряд производить его сдвиг сразу на несколько разрядов. Для этого видоизменяют код множителя с целью представления его с меньшим количеством разрядов, содержащих единицу. Этот код требует как прямых, так и инверсных передач множимого в сумматор. Например, группу единиц в множителе 011... 110 можно преобразовать в группу
т. е. перейти к системе с цифрами
.
Таким образом, в основе способа лежит представление числа как совокупности следующих последовательностей: нулей, единиц, нулей с изолированными единицами, единиц с изолированными нулями.
Правила для определения оптимального представления множителя, при котором получается наименьшее количество передач множимого, гласят следующее: два или больше соседних нулей или соседних единиц необходимо рассматривать как последовательность. Если, например, умножение начинается с младших разрядов и множитель содержит последовательность единиц, то производится вычитание множимого с соответствующим (младшим) весом, а затем сдвиг через все эти единицы.
Сдвиг через последовательность единиц прекращается на первом нуле. Если сразу за этим нулем расположена единица, то множимое вычитается и выполняется сдвиг через последовательность единиц. Если за этим нулем непосредственно следует второй нуль, то множимое прибавляется, а затем выполняется сдвиг через последовательность нулей, который прекращается на первой единице. Если за этой единицей следует нуль, то множимое прибавляется и производится сдвиг через последовательность нулей. Если за этой единицей непосредственно следует вторая единица, то производится вычитание множимого с соответствующим весом данного разряда, а затем сдвиг через последовательность единиц. Если в старшем разряде множителя стоит 1, входящая в последовательность единиц, то сдвиг необходимо продолжать до первого нуля после старшего разряда множителя.
Следует отметить, что при умножении старшими разрядами применяются несколько другие правила определения оптимального множителя. И в том, и в другом случае в среднем на каждую операцию сложения выполняется сдвиг на 2,9 разряда, если схема рассчитана на сдвиг не более чем на 6 разрядов одновременно.
Таблица 4.1
Анализируемая пара разрядов |
Перенос из предыдущей пары разрядов |
Преобразованная пара разрядов |
Примечание |
00 |
0 |
00 |
Предварительный сдвиг множимого Запоминается единица для следующей пары разрядов
Предварительный сдвиг множимого. Запоминается единица для следующей пары разрядов |
01 |
0 |
01 |
|
10 |
0 |
10 |
|
11 |
0 |
0 |
|
|
|
|
|
00 |
1 |
01 |
|
01 |
1 |
10 |
|
10 |
1 |
0 |
|
11 |
1 |
00 |
В пределе среднее число сложений вычитаний, приходящееся на один разряд множителя, равно 3-1. Это наилучший результат, которого можно достичь при использовании логических методов.
Таким образом, переход от одной разновидности двоичной системы счисления к другой при преобразовании множителя позволяет получить выигрыш во времени выполнения операции в целом. При этом возникают определенной длины последовательности 0 или 1, что в конечном счете приводит к необходимости одновременного анализа нес- кольких разрядов множителя и сдвигу на произвольное число разрядов.
Одновременное умножение на два разряда. Количество циклов, необходимых для реализации в ЭВМ операции умножения, можно сократить, если в каждом цикле анализировать не один, а два или более разрядов множителя, выполняя после анализа одну передачу множимого в сумматор и сдвиг множителя на соответствующее число, т. е. два или более, разрядов. Количество типов передач в СМ, соответствующих различным комбинациям нулей и единиц в анализируемых разрядах, должно быть при этом увеличено. В этом случае необходимо максимально использовать те передачи, которые уже имеются в АУ, в частности передачу с преобразованием в инверсный код.
Для организации ускоренного умножения разбивают множитель на группы по два разряда и преобразуют его таким образом, чтобы каждая группа содержала не более одной значащей единицы, понимая
код последней
или
.
Тогда для младшей пары разрядов при умножении с младших разрядов возможны следующие комбинации единиц и нулей в разрядах: 00, 01, 10 и 11.
Для первой комбинации не производится ни сложение, ни вычитание, для второй — суммирование множимого, для третьей — суммирование сдвинутого на один разряд влево множимого, т. е. умноженного на два, а для четвертой — вместо двух сложений при умножении без ускорения выполняется одно вычитание множимого и одно сложение после сдвига множимого на 2 разряда, т. е. пара разрядов множителя преобразуется к виду 101. Поскольку сложение после сдвига приходится на умножение на следующую пару разрядов, то, вместо того чтобы его выполнять, добавляют единицу в следующую за данной пару разрядов. С учетом этого действия при умножении выполняются в соответствии с табл. 4.1.
Описанная процедура повторяется для всех пар разрядов множителя, а также для одной пары разрядов левее запятой, т. к. может оказаться необходимым добавить к ней (к ее нулям) единицу.
Например, множителю
0,100111 соответствует преобразованный
множитель 0,10100
.
Пример. А = 0,10101; В=0,100111.
В примере вертикальной чертой отделены два знаковых разряда сумматора и два анализируемых разряда регистра множителя.
-
Рг множителя
0,1001
1001
+ 1
11
0 + [- А]доп
00
11
101011 Рг множимого
000000000000 СМ
010101
Сдвиг Рг В
0010
Сдвиг СМ
на 2 разряда 10 +2А
11 11
01
010101000000 СМ
110101010000
01011
Сдвиг Рг В
0000
Сдвиг СМ
на 2 разряда
10 + 2А
01
00
01
001011010000 СМ 010010110100
01011
Сдвиг Рг В
0000
00 Сдвиг СМ на 2 разряда
01 00
101000110100 СМ 011010001101
Умножение выполняется за 3 такта вместо 6.
Таким образом, ускорение умножения достигается за счет того, что:
при комбинации 11 два сложения заменяются одним вычитанием, которое эквивалентно сложению благодаря использованию инверсных кодов;
добавление 1 в соседнюю старшую группу множителя производится одновременно с вычитанием множимого и, следовательно, не увеличивает время умножения.
Следует отметить, что в общем случае при умножении на два разряда множителя двух знаковых разрядов в сумматоре недостаточно. Здесь возможны случаи при А 1, когда даже во втором знаковом разряде может появиться единица переполнения, т. е. будет искажен знак частичного произведения. Действительно, если в первом и во втором тактах выполнялась операция «+2А», в сумматоре получим содержимое:
в первом такте S1 = 2А;
во втором такте после сдвига содержимого сумматора на 2 разряда вправо S2 = 2А + 2-1А. Если А1, то S2 > 2. Будем исходить из худшего варианта, когда во всех тактах умножения выполняются операции «+2А». Тогда в сумматоре будет получена последняя сумма следующего вида:
Таблица 4.2
Анализируемая пара. разрядов bibi+1 |
Соседний справа разряд bi+2 |
Преобразованная пара разрядов bibi+1 |
Примечание |
00 |
0 |
00 |
|
01 |
0 |
01 |
|
10 11 |
0 0 |
0 0 |
Предварительный сдвиг множимого |
00 |
1 |
01 |
|
01 |
1 |
0 |
|
10 11 |
1 1 |
0 00 |
Предварительный сдвиг множимого |
При любом А сумма
.
Следовательно, при данном способе
умножения сумматор должен иметь три
знаковых разряда.
При одновременном анализе двух разрядов, начиная со старших, правила преобразования множителя существенно изменяются. На характер действий влияет значение соседнего справа разряда по отношению к анализируемой паре разрядов. При этом анализ разрядов всегда начинается с пустой пары. В зависимости от значения соседнего справа разряда происходит изменение состояния преобразуемых разрядов и выполнение действий в соответствии с табл. 4.2.
Следует отметить, что объем оборудования АУ при умножении на два разряда несколько увеличивается по сравнению с АУ, работающим без ускорения.
Одновременное умножение на три и более разряда, для реализации которого применим подобный способ ускорения, используется реже, так как при этом увеличивается количество требуемых типов передач. Это приводит к значительному усложнению схем, реализующих умножение.
Вместе с тем в некоторых ЭВМ, например, старших моделей серии ЕС, для ускорения операции умножения используется шестнадцатеричная система счисления, т. е. система с основанием р = 24. Одновременный анализ четырех двоичных разрядов в соответствии с табл. 4.3 позволяет осуществлять сдвиг сразу на четыре двоичных разряда и в четыре раза уменьшает количество тактов суммирования, необходимых для выполнения операции умножения. При этом для накопления частных произведений также требуется сумматор дополнительного или обратного кода, а анализ начинается с младшей тетрады множителя.
Этот способ может быть реализован, например, путем предварительного формирования таблицы значений ЗA, 5A и 7A, занесения этой таблицы в соответствующие регистры и подключения их выходов ко входу сумматора. Получить таблицу можно следующим образом. На сумматор передается +A, а затем во втором такте добавляется +2A. Результат сложения +ЗA передается в первый регистр таблицы и остается на сумматоре. В третьем такте путем прибавления +2A на сумматоре формируется результат +5A и передается во второй регистр таблицы, в четвертом такте получается +7A. Значения множимого ±2A, ±4A и +8A формируются при передаче на сумматор мно
Таблица 4.3
Анализируемая цифра |
Анализируемая тетрада |
Действия на сумматоре при значении предыдущей тетрады |
Анализируемая цифра |
Анализируемая тетрада |
Действия на сумматоре при значении предыдущей тетрады |
||
≥8 |
< 8 |
≥8 |
< 8 |
||||
0 1 2 3 4 5 6 7 |
0000 0001 0010 0011 0100 0101 0110 0111 |
+1A +2A +3A +4A +5A +6A +7A +8A |
0 +1A +2A +3A +4A +5A +6A +7A |
8 9 A B C D E F |
1000 1001 1010 1011 1100 1101 1110 1111 |
-7A -6A -5A -4A -3A -2A -1A 0 |
+8A -7A -6A -5A -4A -3A -2A -1A |
жимого с регистра А прямым или инверсным кодом со сдвигом соответственно на 1,2 и 3 разряда влево. Значения множимого ±6А формируются при передаче значения 3А из первого регистра таблицы прямым или инверсным кодом со сдвигом на один разряд влево.
С целью исключения четырех подготовительных тактов, которые необходимы для получения таблицы значений ЗА, 5А, 7А, требуемые значения множимого можно сформировать за один такт схемным путем, однако объем оборудования при этом существенно возрастает.
Следует отметить, что при реализации данного способа сумматор должен содержать 5 знаковых разрядов, а регистры таблицы по 4 знаковых разряда.
Умножение с запоминанием промежуточных переносов
Время умножения можно сократить путем уменьшения длительности каждого такта передачи множимого в СМ за счет исключения из него времени, затрачиваемого на распространение переносов. Суть этого способа ускорения состоит в том, что весь процесс получения произведения выполняется суммированием без распространения переносов с одновременным их накоплением и однократным распространением переносов на заключительном этапе умножения. При этом в каждом цикле умножения (при р = 2) суммируются поразрядно три числа: множимое, если текущий разряд множителя равен 1, частичное произведение как результат умножения на предыдущие разряды и переносы, образованные в предыдущем цикле умножения. При этом переносы, полученные в предыдущем цикле, должны запоминаться до начала следующего цикла.
Матричный метод умножения
Когда множимое и множитель расположены в регистрах машины, нетрудно образовать сразу все частичные произведения. Следовательно, при наличии дополнительных сумматоров можно складывать сразу несколько частичных произведений, а в предельном случае и все. В этом случае формирование произведения можно себе представить как спуск по дереву сумматоров от слагаемых до их общей суммы. Время спуска по дереву будет зависеть от его организации
Таблица 4.4
bi |
ai |
|||||
a6 |
a5 |
a4 |
a3 |
a2 |
a1 |
|
b1 b2 b3 b4 b5 b6 |
a6 b1 a6 b2 a6 b3 a6 b4 a6 b5 a6 b6 |
a5 b1 a5 b2 a5 b3 a5 b4 a5 b5 a5 b6 |
a4 b1 a4 b2 a4 b3 a4 b4 a4 b5 a4 b6 |
a3 b1 a3 b2 a3 b3 a3 b4 a3 b5 a3 b6 |
a2 b1 a2 b2 a2 b3 a2 b4 a2 b5 a2 b6 |
a1 b1 a1 b2 a1 b3 a1 b4 a1 b5 a1 b6 |
и типа применяемых сумматоров. Рассмотрим схему умножения на примере двух шестиразрядных чисел:
A
= a6
a5
a4
a3
a2
a1
B = b6 b5 b4 b3 b2 b1
a6 b1 a5 b1 a4 b1 a3 b1 a2 b1 a1 b1
+ . . . . . . . . . . . . . . . . . . . . . . . . .
a6 b6 a5 b6 a4 b6 a3 b6 a2 b6 a1 b6
c12 c11 . . . . . . . . . . . . . . . . c3 c2 c1
Эту схему умножения можно представить в виде матрицы (табл. 4.4), каждый элемент которой равен 0 или 1 для р = 2.
Для получения произведения двух чисел элементы матрицы надо суммировать в следующем порядке:
… a3
b1
a2
b1
a1
b1
… + a2 b2 + a1 b2
… a1 b3
Элементы, составляющие каждый i-й столбец матрицы, просуммируем с помощью обычных трехвходовых двоичных сумматоров. Значения переносов с этих сумматоров должны быть слагаемыми для (i + 1)-го столбца. Это приведет к тому, что в каждом (i + 1)-м столбце появление слагаемых будет происходить с запаздыванием по времени относительно i-го столбца. Произведем распределение первичных и запаздывающих слагаемых так, как это показано на рис. 4.5.
Схема устройства для реализации этого дерева спуска, которое представляет собой одну из разновидностей матричного алгоритма умножения, представлена на рис. 4.6.
0
a3
b3
a4
b1
a3 b4 a3 b2
0 a2 b3 a3 b1
a1 b6 a1 b5 a1 b4 a2 b2
a1 b1
0 a1 b3 a2 b1 a1 b2
P8 P7 P6 P5 P4 P3 P2 P1
Рис. 4.5
Для одноразрядных сумматоров время образования суммы больше, чем время образования переноса п, поэтому наибольшее время cпуска по дереву данного вида есть
Tу = (n-1)( см + п) (4.18)
если только все конъюнкции вида ai bi поступают на
a6b1
a5b1
a4b1
a3b1
a2b1
a5b2 a4b2 a3b2 a2b2 a1b2 a1b1
a6b2
a5b4 a4b3 a3b3 a2b3 a1b3
c2
a6b3 c1
a5b4 a4b4 a3b4 a2b4 a1b4
a5b5 c3
a6b4
a4 b5 a3 b5 a2 b5 a1 b5
a5b4 c4
a6b6
a6b5 a4 b6 a3 b6 a2 b6 a1 b6
c5
c12 c11 c10 c9 c8 c7 c6
Рис. 4.6
дерево спуска одновременно. Это время складывается из спуска по самой длинной вертикали, а затем последовательного распространения переноса через сумматоры нижнего ряда вплоть до самого левого.
Существенный вклад в величину Ту вносит время спуска по вертикали. Отдельная вертикаль в исследуемом дереве представляет собой последовательное соединение одноразрядных сумматоров. Дерево спуска по вертикали можно сделать таким, как показано на рис. 4.7. Если такое дерево имеет j ярусов, то справедливо неравенство
2j≤ m≤ 2 j+1 –1,
где т — число слагаемых. Время спуска по этому дереву составит
cп j см
Указанная организация спуска по вертикали приводит к тому, что дерево сумматоров трансформируется (рис. 4.8). Новое дерево более низкое, чем исходное, и, естественно, что время спуска уменьшается до величины
Tу = 2 [ см + (n-2) п] (4.14)
a4
b1
a2
b3
a3 b2
a1 b5 a3 b1
a1 b4 a2 b2
0 a2 b1 a1 b1
0 0 a1 b3 a1 b2
Рис. 4.7
Ab6 Ab5 Ab4 Ab3 Ab2 Ab1 р6 р5 р4 р3 р2 р1
Рис. 4.8
C S C S
C S
C S
Рис. 4.9.
если только для t = п /см справедливо
t ≤1 ≤2t ,
что обычно выполняется на практике.
Таким образом, преобразование дерева спуска уменьшит время спуска по нему в q раз:
q=(n-1) / 2 = (t+1) / [ t (n-2) + 1].
Когда п = см то q = 1, ибо в данном случае оказывается, что спуск по вертикали происходит за то же время, что и по диагонали. Если же t =1/2, то q =3/2 • (n-1)/n, т.е. ускорение спуска происходит почти в 1,5 раза.
Как следует из соотношения (4.14), время формирования произведения деревом с измененной организацией оказывается приблизительно равным сложению чисел разрядности 2n в сумматоре с последовательным распространением переноса [38].
Дальнейшее ускорение умножения может быть связано с применением в нижнем ряду дерева спуска сумматора не с последовательным распространением переноса, а какого-либо другого типа, который приводит к уменьшению времени сложения
Задачей дерева спуска является сведение n частичных произведений к их сумме Рассмотренная структура дерева спуска не единственная. Будем строить дерево спуска из однотипных параллельных сумматоров, каждый из которых состоит из обычных двоичных одноразрядных сумматоров, не связанных друг с другом. Все n частичных произведений будем одновременно суммировать на [n /3] сумматорах. Полученные m =2 [n /З] слагаемых вновь одновременно суммируем на [m /3] сумматорах и объединяем выходы этих сумматоров в новый массив и т. д. Через ступеней мы от n слагаемых приходим к двум слагаемым - векторам 5 и n (рис 4 9). Наибольшее число слагаемых, которое может быть приведено таким деревом при ступенях, определится из рекуррентного соотношения
nn –1)/2 ] (4.15)
где n = 2. Если число слагаемых n больше, чем значение n , определенное из (4.15), то число ступеней в дереве спуска должно быть увеличено.
Время спуска по дереву приведенной структуры
сп =см
Число параллельных сумматоров в дереве спуска есть n - 2, но они не все одинаковой разрядности. На рис. 4.10 представлена схема дерева спуска, изображенного на рис. 4.9 в двоичных одноразрядных сумматорах. Номера внутри этих сумматоров указывают их принадлежность к соответствующим параллельным сумматорам.
a6b2 a6b1
a4b4
a4b3
a6b3
a5b2
a6b3 a2b6 a1b6 a1b5
a4b5 a2b5 a2b6 a2b4
a5b4 a3b3
a3b4
a6b4 a4b3 a1b4
a4b6 a2b3
a3 b5 a5b1 a3b2
a5b5
a1b3 a1b2
a6b6 a6b5 a4b1 a2b2 a2b1
a5b6 a1 b1
c10 c9 c8 c7 c6 c5 c4 c3 c2
S11 S10 S9 S8 S7 S6 S5 S4 S3 S2 S1
Рис. 4.10
Дерево спуска рассмотренной структуры формирует произведение, обрабатывая одновременно все n частичных произведений. Его выходы подключаются к соответствующим входам параллельного сумматора с распространением переносов. При определенном компромиссе между стоимостью оборудования и временем получения результата возможен одновременный учет лишь группы частичных произведений. В этом случае полученная сумма наряду с новыми частичными произведениями вновь подается в дерево спуска для последующих суммировании. Итеративный процесс заканчивается, когда все частичные произведения будут учтены. Для уменьшения времени, отводимого для реализации одной итерации, полученную сумму следует направлять не на вход дерева спуска, а на самый нижний допустимый ярус Пусть n = uv, где n - число частичных произведений; v - число итераций; u - число частичных произведений, обрабатываемых на одной итерации; тогда полное время приведения n слагаемых к двум при использовании дерева спуска типа рис. 4.11 составит
сп =((u)+2v)см
Если же использовать полное дерево, то время спуска сп* =n)см .
Частичные произведения
C S C S
C S
Сдвинуто на и разрядов
C S
C S
C S
Рис. 4.11
Например, при n= 30, u = b и v = 5 получим сп = 13 см и *сп = 8 см. Заметим, что требуемое оборудование существенно отличается для этих двух схем - при итерационном спуске число сумматоров есть и, а при прямом – п-2. В нашем случае эти величины равны 6 и 28 соответственно.
Матричные способы умножения дают выигрыш во времени умножения, но требуют большего объема оборудования по сравнению с умножением методом накопления частичных произведений. Вместе с тем в связи с быстрым прогрессом микроэлектроники в области создания больших интегральных схем (БИС) они все чаще применяются на практике.
Наконец, для ускорения операции умножения можно использовать таблицы. Двоичное умножение с помощью таблиц сводится либо к выбору из таблицы готового результата, либо к суммированию сдвинутых относительно друг друга частичных произведений, если в таблицах хранятся результаты умножения нескольких разрядов множимого на несколько разрядов множителя.
Быстрое умножение чисел большой разрядности
Пусть в нашем распоряжении имеется умножитель, позволяющий перемножать m-разрядные числа в р-ичной системе счисления, а нам требуется перемножить n-разрядные числа и п = kт, где k > 1 и целое. Нас будет интересовать вопрос о времени Т (п) умножения n-разрядных чисел, выраженном в единицах времени перемножения m-разрядных чисел.
Рассмотрим случай целых чисел и выберем вначале k = 2, тогда сомножители A и В можно представить в виде А= рmа' + а", где m-1 m-1
a' = Σ am i рi а" =Σ ai рi
t=0 t=0
Произведение чисел А и В определится как
D = AB = р2mа' b' + рm ( а'b"+ a"b') + a" b".
Для того чтобы вычислить это произведение, надо произвести четыре умножения m-разрядных чисел, две операции сдвига и три операции сложения, следовательно,
T(2m) = 4T(m) + 3см + 2 сдв.
В то же время совершенно очевиден и другой алгоритм вычисления произведения А • В:
D = (р2m + рm ) а'b'+ рm (а' - b")( b"- b')+( рm+ 1) a" b".
Время вычисления произведения по этому алгоритму
Т (2т) = ЗТ (т) + 2см + 4сдв.
Обычно Т (т) >> cм + 2 сдв и второй алгоритм оказывается более быстрым.
Приведенный пример показывает, что при перемножении k-кратных чисел число умножений однократных чисел может быть сделано пропорциональным не k2, как это кажется на первый взгляд, а меньшей величине. Какова эта величина для произвольного k? Оказывается, что [16]
T(km) ≤ (2k-1)T(m) +cm,
где с- константа, учитывающая необходимость выполнения помимо умножений еще и некоторого числа сложений и сдвигов.
Д
ля
n-разрядных
чисел, представленных в двоичной системе
счисления, существуют алгоритмы
[16], которые позволяют вычислить
2n-разрядное
произведение за время меньшее, чем сп
2log2
n log2
n шагов.
Если при умножении двоичных чисел
использовать быстрое преобразование
Фурье, то
Т (п) = сп lоg2 п lоg2 lоg2 п.
Эти алгоритмы оказываются значительно более быстрыми, нежели очевидный алгоритм умножения, требующий для своей реализации времени, пропорционального величине n2.