- •Основы компьютерной арифметики и логики
- •Предисловие
- •Глава 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
3.2. Выполнение арифметических операций с десятичными числами
3.2.1. Сложение десятичных чисел в эвм
При выполнении арифметических операций над десятичными числами последние обычно представляются как целые числа, то есть числа с фиксированной справа запятой. При выполнении арифметических операций над этими числами первоначально анализируются их знаки. Если при выполнении операции суммирования окажется, что знаки десятичных слагаемых одинаковые, то такие числа складываются в прямом коде. Если же знаки слагаемых разные, то в этом случае из большего числа вычитается меньшее, то есть отрицательное число, которое в этом случае представляется в виде дополнения до , где - количество десятичных разрядов в наиболее «длинном» из участвующих в операции операнде. При этом вычитание заменяется сложением положительного числа с дополнением отрицательного.
Если выполняется операция вычитания, то знак вычитаемого предварительно изменяется на обратный, после чего действия над десятичными операндами производятся так же, как и при алгебраическом сложении.
Следует помнить, что дополнение числа в двоично-десятичном коде осуществляется путем инвертирования значений двоичных разрядов в тетрадах с прибавлением единицы в младший двоичный разряд младшей тетрады по правилам двоичной арифметики. Такое дополнение получается с потетрадным избытком шесть. Поэтому, если при сложении нет переносов из каких-либо тетрад, то после выполнения сложения они должны корректироваться путем вычитания из каждой тетрады числа 6, то есть прибавления кода 1010, являющегося дополнением 6 до 16. Наличие переноса из старшей тетрады при сложении операндов с различными знаками свидетельствует о том, что результат получился в прямом коде, а отсутствие переноса свидетельствует о том, что результат получился в дополнительном коде.
Пример.
Сложить два десятичных числа и .
Естественные двоично-десятичные коды чисел и соответственно будут иметь вид и .
Образуем дополнение числа – 78 до 102 с избытком 6 в каждой тетраде путем инверсии разрядов кода 0111 1000 и прибавлением 1 в младший разряд младшей тетрады, тогда
1000 = [Y]доп.(с избытком 6).
Теперь, опуская для простоты знаковые разряды, произведем сложение кода X с кодом [Y]доп., помня, при этом, что для положительных чисел прямой и дополнительный коды совпадают
1001 0101 X
+ 1000 1000 [Y]доп. (с избытком 6)
← 0001 1101 [X+Y]пр. (сумма в прямом коде
с избытком в первой тетраде)
+ 0000 1010 коррекция
0 001 0111 Х + Y = 17 (истинное значение суммы).
Пример.
Найти разность десятичных чисел и , т.е. выполнить .
В естественной двоично-десятичной форме записи .
[Y] доп. (с избытком 6) равно 0111 1101, тогда операция вычитания реализуется следующим образом:
0110 0111 X
+ 0111 1101 [Y]доп. (с избытком 6)
1110 1101 [X+Y]доп. (с избытком 6)
Перенос из стареющей тетрады отсутствует,
+ следовательно сумма отрицательная.
1010 0000 коррекция
1000 0100 [X-Y] доп. (без избытка 6 в тетрадах).
Перевод суммы в прямой код.
0111 1100 [X-Y] пр. (с избытком 6 в каждой тетраде)
+ 1010 1010 коррекция
0001 0110 X – Y= – 16 (истинное значение суммы).
В данном примере отсутствие переноса из старшей тетрады при сложении и дополнения для указывает на то, что результат получился отрицательный в виде дополнения. Для определения истинного значения результата следует от полученного дополнения для взять новое дополнение, т.е. получить прямой код с избытком шесть, и из него потетрадно вычесть избыток 6, т.е. потетрадно прибавить 1010.
Из приведенных примеров следует, что при сложении десятичных чисел с разными знаками знак суммы определяется по наличию или отсутствию переноса из старшей тетрады. Если перенос имеет место, то результат положительный в прямом коде. Если перенос отсутствует, то получается отрицательный результат в виде дополнения. В том случае, когда при сложении чисел с одинаковыми знаками возникает перенос из старшей тетрады, то это означает наличие десятичного переноса.
Умножение и деление десятичных чисел в ЭВМ реализуется сложнее, чем соответствующие операции с двоичными числами. Рассмотрим эти операции ниже.