- •Компьютерная арифметика и алгоритмическое моделирование арифметических операций
- •Введение
- •Глава 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. Разработка алгоритма вычисления квадратного корня
- •Компьютерная арифметика и алгоритмическое моделирование арифметических операций
4.7. Разработка алгоритма вычисления квадратного корня
Извлечение квадратного корня, как и деление, можно реализовать в цифровых машинах двумя способами: с восстановлением остатка и без восстановления.
При вычислении квадратного корня (для чисел с фиксированной запятой) подкоренное выражение должно быть положительным и меньше единицы.
Извлечение квадратного корня производится путем деления исходного числа на переменный делитель. Первое значение переменного делителя равно 0,01, следующие значения формируются путем приписывания пары цифр 01 к уже найденному числу.
В сумматор заносится подкоренное выражение. Далее необходимо выполнить (n-2) цикла, каждый из которых может содержать три такта:
1) из значения на сумматоре вычитается содержимое переменного делителя (РгД) и определяется очередная цифра результата, которая равна инверсии знака сумматора;
2) если после выполнения вычитания содержимое сумматора меньше нуля, то нужно выполнить восстановление содержимого сумматора путем сложения его с переменным делителем;
3) производится сдвиг содержимого сумматора на один разряд влево и формируется новый переменный делитель.
Нужно помнить, что для отрицательных чисел действительных корней не существует.
Схема алгоритма извлечения квадратного корня в соответствии с описанным алгоритмом изображена на рис. 4.7.
Р ис. 4.6. Схема алгоритма ускоренного деления с анализом двух разрядов делителя
Рис. 4.6. Схема алгоритма ускоренного деления с анализом двух разрядов делителя (окончание)
Рис. 4.7. Схема алгоритма вычисления квадратного корня
Буквами yi обозначены разряды регистра результата (РгР). Начальное значение счетчика во всех алгоритмах принимается равным (n-2), где n – число разрядов исходных чисел, так как используются модифицированные коды.
Рассмотрим пример для операции вычисления квадратного корня для числа с фиксированной запятой. Извлечем квадратный корень из числа А = 0,101111 по разработанному алгоритму.
См = 0,101111 РгР = 0 (регистр результата)
+1,110000 РгД = 0,01 (переменный делитель)
I 1) См=См-РгД= 0,011111 РгР = 0,1 (так как См>0)
3) См = См← = 0,111110 РгД = 0,101
+1,011000
II 1) См=См-РгД= 0,010110 РгР = 0,11 (См>0)
3) См = См← = 0,101100 РгД = 0,1101
+1,001100
III 1) См=См-РгД= 1,111000 РгР = 0,110 (так как См<0)
+ 0,110100
2) См=См+РгД=0,101100
3) См = См← = 1,011000 РгД = 0,11001
+1,001110
IV 1) См=См-РгД= 0,100110 РгР = 0,1101 (так как См>0)
3) См = См← = 1,001100 РгД = 0,110101
+1,001011
V 1) См=См-РгД= 0,010111 РгР = 0,11011 (так как См>0)
3) См = См← = 0,101110 РгД = 0,1101101
+1,0010011
VI 1) См=См-РгД= 0,010111 РгР = 0,110110 (так как См<0)
В циклах I, II, IV и V пропущен второй такт, потому что сумматор положителен и восстановление остатка не требуется.
Ответ: В = = 0,110110.
В случае извлечения квадратного корня без восстановления остатка каждая цифра результата может быть определена за меньшее количество тактов, чем в случае выполнения этой операции с восстановлением остатка. Правила вычисления приведены в [10].
При извлечении квадратного корня в цифровых машинах с плавающей запятой порядок подкоренного выражения должен быть приведен к четному числу. Если порядок подкоренного выражения оказался нечетным, то к нему можно добавить единицу, а мантиссу сдвинуть на один разряд вправо. При этом порядок надо разделить на два путем сдвига на один разряд вправо, а из мантиссы извлечь квадратный корень обычным образом. Результат в любом случае сразу оказывается нормализованным. Таким же образом можно проектировать любые алгоритмы выполнения операций, описанных в теоретических главах 2 и 3.
Библиографический список
Потапов В.И., Потапова Л.О. Введение в информатику и вычислительную технику: Учеб. пособие. – Омск: Изд-во ОмГТУ, 1995. – 138 с.
Савельев А.Я. Основы информатики: Учебник. – М.: Изд-во МГТУ, 2001. – 327 с.
Операции двоичной и десятичной арифметики в ЭВМ: Метод. указания к практическим занятиям по курсу «Прикладная теория цифровых автоматов» / Сост. И.А. Пальянов. – Омск: Изд. ОмПИ, 1990. – 36 с.
Потапов В.И. Методы ускоренного выполнения арифметических операций в ЦВМ: Учеб. пособие. – Омск: Изд. ОмПИ, 1980. – 87 с.
Савельев А.Я. Арифметические и логические основы цифровых автоматов: Учебник. – М.: Высш. школа, 1980. – 255 с.
Каган Б.М. Электронные вычислительные машины и системы: Учеб. пособие для вузов. – М.: Энергоатомиздат, 1991. – 592 с.
Гаврилов Ю.В., Пучко А.Н. Арифметические устройства быстродействующих ЭЦВМ. – М.: Сов.радио, 1970. – 279 с.
Карцев М.А. Арифметика цифровых машин. – М.: Наука, 1969. – 575 с.
Моделирование на ЭВМ алгоритмов выполнения арифметических операций и синтез управляющих автоматов: Метод. указания / Сост. И.А. Пальянов, О.П. Шафеева. – Омск: Изд. ОмПИ, 1988. – 36 с.
10. Папернов А.А. Логические основы цифровой вычислительной техники. – М: Сов. радио, 1972. – 592 с.
Виктор Ильич Потапов,
Ольга Павловна Шафеева
Учебное издание