
- •Компьютерная арифметика и алгоритмическое моделирование арифметических операций
- •Введение
- •Глава 4, подготовленная доцентом о.П. Шафеевой, посвящена вопросам разработки алгоритмических моделей выполнения арифметических операций и моделирования на пэвм спроектированных алгоритмов.
- •Основы двоичной компьютерной арифметики
- •1.1. Позиционные системы счисления
- •Десятичная позиционная система счисления
- •Двоичная позиционная система счисления
- •1.1.3. Восьмеричная позиционная система счисления
- •1.1.4. Шестнадцатеричная позиционная система счисления
- •Перевод чисел из одной позиционной системы счисления в другую
- •1.2.1. Перевод целых чисел
- •1.2.2. Перевод правильных дробей
- •1.2.3. Перевод неправильных дробей из одной системы счисления в другую
- •1.2.4. Частный случай перевода чисел из одной системы счисления в другую
- •1.2.5. Перевод чисел из одной системы счисления в другую с использованием промежуточной двоично-десятичной системы
- •1.3. Представление чисел с фиксированной запятой (точкой)
- •1.4. Представление чисел с плавающей запятой (точкой)
- •1.5. Коды двоичных чисел
- •1.5.1. Прямой код
- •1.5.2. Обратный код
- •1.5.3. Модифицированный обратный код
- •1.5.4. Дополнительный код
- •1.5.5. Модифицированный дополнительный код
- •2. Выполнение арифметических операций с двоичными числами
- •2.1. Сложение (вычитание) двоичных чисел с фиксированной запятой
- •2.1.1. Алгебраическое сложение чисел в дополнительном коде
- •2.1.2. Алгебраическое сложение чисел в обратном коде
- •2.1.3. Переполнение разрядной сетки при сложении чисел
- •2.2. Сложение (вычитание) двоичных чисел с плавающей запятой
- •2.2.1. Метод ускоренного сложения двоичных чисел с запоминанием переносов
- •2.3. Умножение двоичных чисел с фиксированной запятой
- •2.4. Машинные технологии выполнения операции умножения двоичных чисел с фиксированной запятой
- •2.5. Умножение двоичных чисел с плавающей запятой
- •2.6. Методы ускоренного выполнения операции умножения двоичных чисел
- •2.6.1. Метод пропуска такта суммирования
- •2.6.2. Метод анализа сомножителей
- •2.6.3. Метод расшифровки и одновременного умножения на два разряда множителя
- •2.6.4. Метод ускоренного умножения Мак-Сорли
- •2.6.5. Метод ускоренного умножения Лемана
- •2.6.6. Метод умножения с расшифровкой пар разрядов множителя и запоминанием переносов
- •2.7. Деление двоичных чисел с фиксированной запятой
- •2.8. Деление двоичных чисел с плавающей запятой
- •3. Основы десятичной компьютерной арифметики
- •3.1. Машинное кодирование десятичных чисел
- •3.2. Выполнение арифметических операций с десятичными числами
- •3.2.1. Сложение десятичных чисел в эвм
- •3.2.2. Умножение десятичных чисел в эвм
- •3.2.3. Ускорение умножения в -кодах
- •Деление десятичных чисел в эвм
- •4. Алгоритмические модели выполнения арифметических операций
- •4.1. Проектирование универсального алгоритма перевода чисел в разные системы счисления
- •4.2. Моделирование алгоритма сложения двоичных чисел
- •Различные случаи ненормализованных мантисс
- •4.3. Проектирование алгоритма умножения чисел
- •4.5. Проектирование алгоритма деления чисел
- •4.7. Разработка алгоритма вычисления квадратного корня
- •Компьютерная арифметика и алгоритмическое моделирование арифметических операций
2.6.5. Метод ускоренного умножения Лемана
Метод Лемана рассмотрим в предположении, что умножение выполняется, начиная с младших разрядов множителя.
Алгоритм в данном цикле операции умножения может быть записан в следующем виде:
где
– номер разряда множителя;
– цифра -го разряда множителя;
– двоичная
переменная, единичное значение которой
для соответствующего разряда множителя
указывает на необходимость выполнения
арифметического действия между суммой
частичных произведений и множимым
(сложение или вычитание);
– знак
арифметического действия.
Очевидно,
что при
.
Если
,
то производится сложение суммы частичных
произведений с множимым. При
производится
вычитание множимого из суммы частичных
произведений.
Из
анализа приведенных выше выражений,
описывающих алгоритм действий в данном
цикле умножения, следует, что перед
началом операции умножения
.
Это значение
сохраняется до появления первой единицы
в младшем разряде множителя. При появлении
там единицы
производится сложение множимого с
предшествующей суммой частичных
произведений, если в следующем по
старшинству разряде множителя содержится
«0», или производится вычитание множимого
из предшествующей суммы частичных
произведений, если в следующем по
старшинству разряде множителя содержится
«1», то есть
.
При
появлении 0 в младшем разряде множителя
производится вычитание множимого из
предшествующей суммы частичных
произведений, если в следующем по
старшинству разряде множителя содержится
«1»
,
или производится сложение множимого с
предшествующей суммой частичных
произведений, если в следующем по
старшинству разряде множителя содержится
«0»
.
Рассмотрим на конкретном примере последовательность действий в сумматоре и регистре множителя при умножении по методу Лемана.
Пусть
множимое
,
а множитель
.
Будем считать, что множитель и сумма частичных произведений в каждом цикле вычислений сдвигаются на один разряд вправо соответственно в регистре множителя и в сумматоре. Сложение (вычитание) в сумматоре производится в обратном модифицированном коде. Для округления результата в сумматоре имеется дополнительный разряд справа.
С учетом сказанного схема выполнения конкретного примера ускоренного умножения по методу Лемана представлена ниже.
Содержимое Содержимое
регистра
сумматора
[CM]
100011 10 исходное состояние 00 00000000 0
010001 11 сдвиг
вправо
и [CM] 00 00000000 0
(-) + 11 01001011 1
11 01001011 1
001000 11 сдвиг вправо и [CM] 11 10100101 1
000100 01 сдвиг вправо и [CM] 11 11010010 1
000010 00 сдвиг вправо и [CM] 11 11101001 0
(+)
+ 00 10110100 0
1 00 10011101 0
00 10011101 1
000001 00 сдвиг вправо и [CM] 00 01001110 1
000000 10 сдвиг вправо и [CM] 00 00100111 0
000000 01 сдвиг вправо и [CM] 00 00010011 1
(+) + 00 10110100 0
произведение 00 11000111 1
округление
00 11001000 0
Непосредственным
умножением можно легко проверить, что
полученное значение произведения
соответствует истинному с учетом
округления.
Анализ
показывает, что при умножении по методу
Лемана даже при наиболее неблагоприятном
сочетании цифр
разрядного
множителя (101010…) количество операций
суммирования равно
.
В среднем же количество операций
суммирования равно
.