- •Основы компьютерной арифметики и логики
- •Предисловие
- •Глава 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. Дополнительный код
- •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.2. Моделирование алгоритма сложения двоичных чисел
- •Различные случаи ненормализованных мантисс
- •4.3. Проектирование алгоритма умножения чисел
- •4.5. Проектирование алгоритма деления чисел
- •4.7. Разработка алгоритма вычисления квадратного корня
- •Определение 1. Пусть и произвольные множества. Соответствием называется тройка множеств
- •Свойства отношений
- •Эквивалентность
- •Толерантность
- •Отношения порядка
- •Самодвойственные функции
- •Монотонные функции
- •Линейные функции
- •Функции, сохраняющие константу
- •5.2.7. Минимизация булевых функций
- •Метод Блейка
- •Метод Квайна-Мак-Класки
- •Минимизация с использованием карт Карно
- •Дана функция четырех переменных (рис. 5.13):
- •Минимизация не полностью определенных булевых функций
- •Минимизация систем булевых функций
- •5.3. Методика синтеза комбинационных схем на логических элементах
- •5.3.1. Логические элементы
- •5.3.2. Общий алгоритм построения комбинационных схем
- •5.3.3. Синтез кс в классическом базисе
- •5.3.4. Синтез кс в базисах «и-не», «или-не»
- •5.3.5. Реализация кс в базисе Жегалкина
- •5.3.6. Синтез составных кс
- •Заключение
- •Библиографический список к главам 1, 2, 3, 4
- •Библиографический список к главе 5
2.7. Деление двоичных чисел с фиксированной запятой
Деление – это процесс обратный умножению. Он фактически сводится к многократному циклическому процессу – вычитанию делителя из делимого и его остатков и соответствующим сдвигам их относительно друг друга либо делителя вправо, либо делимого влево.
В ЭВМ последовательное вычитание делителя заменяется сложением положительного делимого и остатков в модифицированном обратном или в модифицированном дополнительном коде с отрицательным делителем. Остатки также получаются в соответствующем коде.
При делении чисел с фиксированной запятой оба операнда (делимое и делитель ) по модулю должны быть меньше единицы. При этом, чтобы при получении частного не произошло переполнение разрядной сетки, необходимо выполнение дополнительного условия . Поэтому перед началом деления из модуля делимого вычитается модуль делителя. Если разность положительная, то делить нельзя, т.к. , и процесс деления необходимо остановить. Если разность отрицательная , то делить можно. Для этого необходимо восстановить модуль делимого путем прибавления к отрицательной разности модуля делителя и начать процесс деления.
Деление осуществляется следующим образом.
Определяется знак частного путем сложения по модулю два знаков делимого и делителя. Затем производится собственно деление. При этом цифры частного определяются последовательно, разряд за разрядом, начиная со старшего разряда, путем вычитания, например, сдвинутого на один разряд вправо делителя из остатка, полученного от предыдущего вычитания. При определении первой цифры частного за остаток принимается все делимое со знаком плюс. После каждого вычитания делитель сдвигается вправо на один разряд по отношению к делимому и образующимся остаткам. Если остаток от вычитания положительный или равен нулю, то в соответствующий разряд частного заносится 1. Если остаток отрицательный, то соответствующая цифра частного равна 0. Для того, чтобы получить следующую после нуля цифру частного, можно из последнего положительного остатка вычесть делитель, дополнительно сдвинутый на один разряд вправо. Однако в этом случае необходимо выполнить дополнительную операцию сложения для восстановления последнего положительного остатка.
В современных ЭВМ алгоритм деления с восстановлением положительного остатка практически не используется. Если очередной остаток оказался меньше нуля, то к этому отрицательному остатку прибавляется дополнительно сдвинутый на один разряд вправо делитель. При этом образуется очередной остаток. Если он больше или равен нулю, то в соответствующий разряд частного записывается 1, в противном случае - 0 и вычислительный процесс продолжается.
Пример.
Делимое
Делитель .
Требуется найти , т.е. найти и .
Деление возможно, т.к. .
Операции вычитания модуля делителя из модуля делимого и остатков будем выполнять в модифицированном дополнительном коде. Деление производится без восстановления остатка.
Первый шаг. Определение знака частного путем сложения по модулю два знаков делимого и делителя:
.
Второй шаг. Определение первого (старшего) разряда частного путем вычитания из модуля делимого модуля делителя, сдвинутого на один разряд вправо:
.
Третий шаг. Определение второго разряда частного путем вычитания из положительного остатка делителя, сдвинутого еще на один разряд вправо:
.
Четвертый шаг. Определение третьего разряда частного путем вычитания из очередного положительного остатка делителя, сдвинутого еще на один разряд вправо:
.
Пятый шаг. Определение четвертого разряда частного путем сложения отрицательного остатка со сдвинутым еще на один разряд вправо делителем:
.
Шестой шаг. Определение пятого разряда частного путем сложения отрицательного остатка со сдвинутым еще на один разряд вправо делителем:
.
Седьмой шаг. Определение шестого разряда частного аналогично предыдущему:
.
Восьмой шаг. Определение седьмого разряда частного путем вычитания из положительного остатка делителя, сдвинутого в очередной раз на один разряд вправо:
.
Процесс деления может быть продолжен аналогичным образом до получения значения требуемого числа разрядов частного либо до того момента, когда разность не станет равной нулю.
Результат операции деления
.