- •Компьютерная арифметика и алгоритмическое моделирование арифметических операций
- •Введение
- •Глава 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.1.3. Переполнение разрядной сетки при сложении чисел
Выше указывалось, что при сложении двух правильных дробей с одинаковыми знаками может произойти переполнение разрядной сетки, если модуль их суммы оказывается равен или больше единицы.
Формальным признаком переполнения разрядной сетки при сложении чисел в обратном или дополнительном коде является отличие знака суммы кодов от знаков кодов слагаемых.
Пример.
Пусть , а . Произведем сложение в обратном коде.
X = – 0,110010 [X]ob = 1,001101
+ Y = – 0,011111 + [Y]ob = 1,100000
X
+
[X+Y]>1 1
0,101110
Прямого кода для такой В результате сложения обратных кодов
суммы не существует. отрицательных чисел получен код
положительного числа. Это говорит о
неправильности результата, т.е. о
переполнении разрядной сетки.
Признаком переполнения разрядной сетки при сложении чисел в модифицированном обратном или в модифицированном дополнительном коде является образование различных цифр в знаковых разрядах суммы: 01 вместо 00 при сложении двух положительных правильных дробей или 10 вместо 11 при сложении двух отрицательных правильных дробей.
Пример.
Пусть , а . Произведем сложение в модифицированном дополнительном коде.
X = – 0,111001 [X] = 11,000111
+ Y = – 0,110100 + [Y] = 1,100000
X +Y=– 1,101101 1 10,010011
[X+Y]>1 не учитывается
10,010011
Модифицированного В результате сложения модифицированных
дополнительного кода для дополнительных кодов двух отрицательных
такой суммы не существует чисел получен код, у которого в знаковых
разрядах разные цифры. Это говорит о
неправильности результата, т.е. о переполнении
разрядной сетки.
2.2. Сложение (вычитание) двоичных чисел с плавающей запятой
Выше уже отмечалось, что при вычислительных операциях с плавающей запятой двоичные числа представляются в виде мантиссы с ее знаком, которая по модулю строго меньше единицы, и порядка с его знаком, который может быть равен нулю или любому (в пределах отведенного числа разрядов) целому числу, т.е. .
Операция сложения (вычитания) чисел с плавающей запятой производится следующим образом.
Первоначально уравнивают порядки слагаемых, для того чтобы привести в соответствие весовые коэффициенты одноименных разрядов мантисс слагаемых. Для этого меньший порядок слагаемого увеличивают до значения, равного большему порядку, а мантиссу этого слагаемого денормализуют, т.е. сдвигают вправо на число разрядов, равное разности между большим и меньшим порядками слагаемых.
Затем мантиссы обоих слагаемых переводят в модифицированный обратный или в модифицированный дополнительный код с учетом их знаков и складывают в соответствующем коде по рассмотренным выше правилам сложения чисел с фиксированной запятой. При этом возможны три случая.
Первый случай. Сложение мантисс слагаемых произошло без переполнения разрядной сетки и нарушения нормализации.
В этом случае результат сложения мантисс переводится из модифицированного обратного (дополнительного) кода в прямой код и представляется как мантисса суммы. Порядком суммы при этом является общий после уравнивания порядок слагаемых.
Второй случай. Сложение мантисс слагаемых произошло без переполнения разрядной сетки, но результат после перевода мантиссы суммы в прямой код оказался ненормализованным.
В этом случае производится нормализация результата сложения, т.е. мантисса суммы сдвигается на соответствующее число разрядов влево, а порядок суммы уменьшается на такое же число.
Третий случай. При сложении мантисс слагаемых произошло переполнение разрядной сетки, т.е. в знаковых разрядах мантиссы суммы оказалась комбинация 01 или 10.
В этом случае цифры всех разрядов данной мантиссы суммы, включая знаковые, сдвигаются на один разряд вправо, после чего в старший знаковый разряд заносится цифра, совпадающая с цифрой, оказавшейся в младшем знаковом разряде после сдвига. Полученный таким образом результат переводится в прямой код и представляет собой мантиссу суммы. Порядок же суммы при этом следует увеличить, и он будет на единицу больше значения уравненных порядков слагаемых.
Пример (первый случай).
Слагаемые:
Требуется найти , т.е найти и .
Первый шаг.
Уравнивание порядков слагаемых, т.е. денормализация слагаемого , чтобы его порядок стал равен + 101.
После уравнивания .
Второй шаг.
Перевод мантисс обоих слагаемых в модифицированный обратный код
Третий шаг.
Сложение мантисс
1
+
.
Четвертый шаг.
Перевод мантиссы суммы в прямой код .
Результат операции сложения .
Пример (второй случай).
Слагаемые:
Требуется найти , т.е найти и .
Будем производить вычисление в модифицированном обратном коде.
Уравнение порядков в данном примере не требуется.
Первый шаг.
Перевод мантисс слагаемых в модифицированный обратный код
Второй шаг.
Сложение мантисс слагаемых
Третий шаг.
Перевод мантиссы суммы в прямой код
.
Произошла денормализация вправо на три разряда.
Четвертый шаг.
Устранение денормализации путем сдвига прямого кода мантиссы суммы на три разряда влево и вычитания из первоначального порядка суммы трех единиц. Вычитание производится в модифицированном дополнительном или в модифицированном обратном коде
Результат операции сложения
Пример (третий случай).
Слагаемые:
Требуется найти , т.е найти и .
Будем производить вычисления в модифицированном обратном коде.
Первый шаг.
Уравнение порядков слагаемых
.
Второй шаг.
Перевод мантисс слагаемых в модифицированный обратный код
Третий шаг.
Сложение мантисс слагаемых
1
+
10,111011110
Произошло переполнение разрядной сетки (денормализация влево), т.к. в
знаковых разрядах мантиссы суммы оказались разные знаки.
Четвертый шаг.
Устранение переполнения (нормализация) путем сдвига мантиссы суммы на
один разряд вправо и прибавления единицы к первоначально полученному порядку суммы в модифицированном дополнительном или в модифицированном обратном коде.
Пятый шаг.
Перевод мантиссы суммы в прямой код
Результат операции сложения