Выполнение арифметических операций в машинах с плавающей запятой.




Выполнения практического задания по курсу «Информатика»

Для студентов 1-го курса специальности 230101

1. Представить числа, заданные в десятичной системе счисления со знаком, в ЭВМ в заданной форме и заданном формате в прямом, обратном и дополнительном кодах (машинное представление).

1.1.Представить числа А1, А2, А3 в ЭВМ в форме с фиксированной запятой в формате n = 5(число разрядов со знаком) в двоичной системе счисления в прямом, обратном и дополнительном коде:

A1 = +8, 75; А2 = -14, 25; А3 = -32, 5.

Заданные числа представляют собой совокупность целой и дробной части в десятичной системе счисления и называются смешанными. При переводе смешанных чисел из десятичной системы счисления в двоичную необходимо перевести отдельно целую и дробную части по правилам перевода целых чисел и правильных дробей, а затем оба полученных результата объединить в одно смешанное число в двоичной системе счисления.

Рассмотрим подробно перевод числа А1 = +8,75 из десятичной системы счисления в двоичную.

Чтобы перевести целое число (целую часть числа) из десятичной системы счисления в двоичную необходимо данное число в десятичной системе счисления, а затем получаемые частные последовательно делить на основание новой (двоичной) системы счисления до тех пор, пока не получится частное меньше основания новой системы счисления. Последнее частное будет являться старшей цифрой числа в новой системе счисления с основание 2, а следующие за ней цифры – остатки от деления записываются в последовательности, обратной их получению.

(8)10 = (1000)2.

 

Чтобы перевести правильную дробь (дробную часть числа) из десятичной в двоичную систему счисления необходимо умножить исходную дробь, а затем дробные части получившихся произведений на основание новой (двоичной) системы счисления. Правильная дробь числа в новой системе счисления с основанием 2 формируется в виде целых частей получившихся произведений, начиная с первого.

 

0,75

* 2

1,50

* 2

1,00

* 2

0,00

 

(0,75)10 = (0,110)2

1)2 = +1000,110.

По аналогии с рассмотренным примером переводим числа А2 и А3 из десятичной системы счисления в двоичную. Получаем: (А2 )2 = - 1110,010; (А3 )2 = - 10000,100.

Таким образом: 1)2 = +1000,110; (А2 )2 = - 1110,010; (А3 )2 = - 10000,100.

При представлении в ЭВМ чисел с фиксированной запятой положение запятой закрепляется в определенном месте относительно разрядов числа и сохраняется неизменным для всех чисел. Запятая может быть зафиксирована перед старшим значащим разрядом числа, после младшего или после любого из разрядов разрядной сетки. В первом случае в ЭВМ будут представлены только числа, которые по модулю меньше единицы (дробные числа), во втором – только целые числа, в третьем – смешанные дроби, в которых запятая разделяет целую и дробную часть. Для кодирования знака используется знаковый разряд, который помещается, как правило, перед старшим значащим разрядом числа (крайний слева разряд). Нуль в этом разряде записывается для положительных чисел, а единица – для отрицательных. Теоретически знак может располагаться и в конце числа.

Практически наиболее удобно в ЭВМ фиксировать положение запятой перед старшим значащим разрядом или после младшего. Фиксацией запятой после любого разряда мы пользуемся в повседневной жизни, однако для машинного представления чисел такой подход не используется. Чаще в ЭВМ, оперирующей с числами с фиксированной запятой, положение запятой фиксируется перед старшим значащим разрядом, т.е. в ЭВМ в этом случае обрабатываются целые числа.

Диапазон представления целых чисел в двоичной системе счисления в формате n со знаком определяется выражением

(1)

Наибольшее целое двоичное число, представленное в заданном формате n = 5 разрядов со знаком, будет содержать единицы во всех значащих разрядах, а наименьшее – единицу в младшем разряде, остальные нули. Код в знаковом разряде (0 или 1) будет определять знак представленного числа.

Числа не могут быть представлены в заданной разрядной сетке и принимаются равными нулю (машинный нуль). Если в знаковом разряде числа, равного нулю, записан нуль, то представлен прямой код положительного машинного нуля, если единица, то представлен прямой код отрицательного машинного нуля.

Исходные числа не всегда могут быть представлены в двоичной системе счисления в заданной машинной разрядной сетке относительно фиксированного положения запятой. Для

n = 5 получаем:

Зн. 2-3 2-2 2-1 20

А1 0 1 0 0 0,

А2 1 1 1 1 0,

А3 1 0 0 0 0,

 

Число А3 вышло за пределы разрядной сетки ЭВМ влево, значащий разряд оказался в знаковом. Произошло переполнение разрядной сетки. В этом случае старший разряд числа А3 теряется. Машинное значение А3 не соответствует заданному, результат вычислений будет неверным.

Чтобы исходные данные и получающиеся в процессе решения задачи промежуточные и конечные величины не превышали диапазон чисел, представленных в заданном формате с фиксированной запятой (не произошло переполнение разрядной сетки), используется масштабирование величин, участвующих в вычислениях. Для этого при подготовке задачи к решению все машинные числа, участвующие в вычислениях, берутся с коэффициентом 2-k, т. е. уменьшаются в 2-k раз. Если разрядная сетка ЭВМ позволяет, то машинные числа увеличиваются в 2+k раз, что повышает точность вычислений.

Таким образом, масштабирование заключается в замене чисел, которые должны участвовать в вычислениях, произведениями этих чисел на масштабный коэффициент M:

Хмаш. = M * Хисх.

Масштабный коэффициент выбирается единым для всех переменных и промежуточных результатов, он имеет вид целой степени основания системы счисления:

При таком масштабировании процесс вычисления в ЭВМ с фиксированной запятой аналогичен процессу вычисления вручную, когда мы на бумаге располагаем при вычислениях числа так, чтобы запятая была под запятой.

В соответствии с выполненным выше переводом заданных чисел мы получили:

1)2 = + 1000,110;

2)2 = - 1110,010;

3)2 = - 100000,100.

Выбираем из заданных чисел максимальное по модулю число (А3)2 и записываем его в заданном формате (n = 5 со знаком) с максимально возможной точностью, т.е. начиная со старшего значащего разряда:

При переходе к машинному представлению числа должно соблюдаться условие:

3)2 маш = М*(А3)2 исх.

Масштабный коэффициент для числа А3 определяем по формуле

 

3)2 маш 1000,

МА3 = ____________ = ________________ = 2-2 , МА3 = 2-2.

3)2 исх 100000,100

 

Полученный таким образом масштабный коэффициент является для данного случая масштабирования общим масштабным коэффициентом для всех исходных чисел в заданном формате. Другими словами, числа (А1)2 и (А2)2 мы должны при вводе в ЭВМ умножить на 2-2, т.е. сдвинуть числа относительно запятой вправо на два разряда и записать в заданном формате, совмещая запятую в числе с запятой, фиксированной в машинном представлении чисел.

В результате проведенного масштабирования исходные данные А1, А2, А3 в машинном представлении будут иметь вид:

1)2 = 00010;

2)2 = 10011;

3)2 = 11000.

Масштабный коэффициент 2-2 будет являться входным масштабом для машинных чисел, а величина 2+2 – выходным масштабом. И входной и выходной масштабные коэффициенты запоминаются оператором, решающим задачу на машине.

В ЭВМ числа в зависимости от их знаков представляются тремя способами - в прямом, обратном и дополнительном кодах.

Прямой код чисел соответствует обычной записи чисел со своим знаком, основан на представлении чисел в виде абсолютного значения с кодом соответствующего знака.

Числа А1, А2, А3 со знаком в ЭВМ с фиксированной запятой (машинное значение) с учетом масштабирования в прямом коде будут представлены так:

Знак 23 22 21 20

А1пр          
А2пр          
А3пр          

 

Положительное число А1 во всех трех кодах имеют один и тот же вид:

 

Знак 23 22 21 20

А1пр          
А1обр          
А1доп          

.

Прямой код используется в ЭВМ для выполнения арифметических операций над положительными числами, для записи положительных и отрицательных чисел в ЗУ, а также в устройствах ввода и вывода.

Для упрощения выполнения арифметических операций в ЭВМ отрицательные числа представляются в обратном и дополнительном кодах.

Чтобы представить двоичное отрицательное число в обратном коде, нужно сохранить в знаковом разряде единицу, а во всех значащих разрядах единицы заменить нулями, а нули – единицами.

Отрицательные числа А2 и А3 со знаком в ЭВМ с фиксированной запятой в обратном коде будут представлены так:

Знак 23 22 21 20

А2обр          
А3обр          

 

Для представления отрицательного числа в дополнительном коде используется два алгоритма. Первый: к младшему разряду обратного кода отрицательного числа необходимо прибавить единицу. Получим:

Знак 23 22 21 20

А2доп          
А3доп          

 

Второй способ представления чисел в дополнительном коде: в знаковом разряде прямого кода сохраняется единица, младшие нулевые разряды до младшей значащей единицы и младшая значащая единица оставляются без изменения, в остальных значащих разрядах единицы заменяются нулями, а нули – единицами. Получим:

 

Знак 23 22 21 20

А2пр          
А2доп          
А3пр          
А3доп          

 

Отрицательный нуль в обратном коде имеет вид:

[-0] обр. = 111111…11.

В дополнительном коде отрицательный нуль отсутствует, т.е. код нуля в дополнительном коде соответствует коду нуля положительного числа.

Таким образом, числа А1, А2 и А3 в машинном представлении в прямом, обратном и дополнительном кодах имеют вид:

А1пр = 00010; А1обр = 00010; А1доп = 00010;

А2пр = 10011; А2обр = 11100; А2доп = 11101;

А3пр = 11000. А3обр = 10111. А3доп = 11000.

 

1.2.. Представить числа В1, В2 в ЭВМ в двоичной системе счисления с плавающей запятой в заданном формате: m = 5 (число разрядов мантиссы со знаком), k = 4 (число разрядов порядка со знаком).

В1 = (-10,5)10; В2 = (-24,25)10.

Переводим заданные числа в двоичную систему счисления по описанным выше алгоритмам:

Числа с плавающей запятой в ЭВМ представляются по формуле:

X = mx * qP, | mx | < 1.

где mx – мантисса числа X, определяющая значащие цифры числа;

р – порядок числа X;

q – основание системы счисления.

Мантисса m представляет собой правильную дробь, т.е. запятая при представлении мантиссы фиксируется перед старшим значащим разрядом.

Порядок р - положительное или отрицательное целое число (запятая при представлении порядка фиксируется после младшего разряда), которое указывает положение запятой в числе.

Порядок р и мантисса m представляются в системе счисления с основанием q = 2.

Чтобы избежать неоднозначности представления чисел в форме с плавающей запятой, обеспечить наибольшую точность представления чисел при заданной разрядности мантиссы, используют представление мантиссы в нормализованном виде. Модуль нормализованной мантиссы должен удовлетворять условию

.

Старший разряд нормализованной мантиссы в q-ичной системе счисления не должен быть равным нулю. Число с плавающей запятой, мантисса которого нормализована, тоже называется нормализованным. Двоичное число Х будет нормализованным, если в старшем разряде мантиссы mх стоит единица. Мантисса, равная нулю, не может быть нормализована, этот случай рассматривается как потеря значимости числа.

Запишем числа В1 = (-10,5)10 и В2 = (-24,25 в двоичной системе счисления с плавающей запятой:

В1 = (-10,5)10 = (-1010,1)2 = (-0,10101*2 +100 )2 пл. зап.

 

В2 = (-24,25)10 = (- 11000,01)2 = (-0,1100001*2+101 )2 пл. зап.

 

Заданные числа в заданном формате с плавающей запятой будут представлены в ЭВМ

в виде:

Знак 2-1 2-2 2 -3 2 -4 Знак 22 21 20

Мантисса В1           Порядок В1        
Мантисса В2           Порядок В2        

 

B1 : mn пр = 11010, p = 0100.

B2 : mn пр = 11100, p = 0101.

1.3. Представить целые числа C1, C2, С3 в двоично-десятичной системе 8421 в зонном и в упакованном форматах в системе кодирования ДКОИ.

С1 = + 138; C2 = - 94; С3 = - 2.

Десятичные цифры О, 1,...,9 представляются в ЭВМ в двоично-кодированном десятичном формате (BCD формате или коде 8421), в котором десятичные цифры хранятся в виде 4-битных двоичных эквивалентов (тетрад). Для кодирования знаков плюс и минус используются также 4-битные комбинации, например, в коде ДКОИ для знака плюс – 1100, для знака минус – 1101.Знак допускается размещать до и после цепочки цифр.

Имеются две разновидности формата для представления десятичных чисел в ЭВМ: упакованный и зонный (распакованный). Упакованный формат 'применяется для операционной обра­ботки десятичных чисел, а зонный формат - для обмена де­сятичной информацией с внешними устройствами (например, с внешней памятью), другими машинами и системами. Де­сятичные данные в обоих случаях рассматриваются как це­лые числа в прямом коде.

В упакованном BCD формате (коде 8421) десятичное число со знаком хранится в виде последовательности 8-битных двоичных групп (байт), все десятичные числа при этом представляются кратным числом байт. Если количество цифр со знаком в числе нечетное, то старший байт содержит старшую нулевую тетраду. Например, число +8524 будет представлено в виде 00001000 01010010 01001100. Код знака расположен в младшей тетраде младшего байта.

В зонном (распакованном) форматев каждом байте содержится только одна де­сятичная цифра и служебный знак, при этом четыре правых разряда байта служат для представления десятичной цифры в двоично-десятичном коде, а четыре левых заняты специальным 4-разрядным кодом (1111), называемым зоной. Знак числа располагается в зоне младшего байта. Например, число +8524 в зонном формате будет представлено в виде 11111000 11110101 11110010 11010100.

 

Числа C1, С2, С3 в упакованном формате будут выглядеть следующим образом:

1) 10 = (+138)10 = 00010011 10001100;

2)10 = (-94)10 = 00001001 01001101;

(C3)10 = (-2)10 = 00101101.

(А1)2=1 0100, Числа C1, С2, С3 в зонном (распакованном) формате будут выглядеть следующим образом:

1) 10 = (+138)10 = 11110001 11110011 11001000;

2)10 = (-94)10 = 11111001 11010100;

(C3)10 = (-2)10 = 11010100.

 

2. Выполнить, используя результаты работы по заданиям 1.1, 1.2 и 1.3, над числами А1, А2, А3 в машинном представлении со знаком заданные арифметические операции.

А1пр = 00010;

А2пр = 10011;

А3пр = 11000.

2.1. Сложение чисел с фиксированной запятой: А1 + А3.

Алгоритм сложения:

· Положительные числа остаются без изменения, отрицательные числа переводятся в дополнительный код: А1пр = 00010; А3доп = 11000.

· Суммируем полученные коды:

+ 00010пр

11000доп

11010доп

· Анализируем полученный результат на переполнение (анализируем переносы из старшего значащего разряда и из знакового). Оба анализируемых переноса отсутствуют, следовательно, переполнения нет, результат верный.

· Переводим результат суммирования в прямой код: А1 + А3 = (10110)2пр = (-6)10.

Проверка: (+8,75)10 + (-32,5)10 = (-23,75)10. С учетом выходного масштаба, равного 2+2 , получаем: (-6)10 * 2+2 = (-24)10. Погрешность обусловлена очень малой разрядной сеткой для представления чисел в ЭВМ (потеря младших значащих разрядов чисел при масштабировании).

2.2. Вычитание чисел с фиксированной запятой: А3 - А2.

В ЭВМ операция вычитания чисел с произвольными знаками заменяется операцией алгебраического сложения по формуле

А3 - А2 = А3 + (-А2 ).

Алгоритм вычитания:

· Знак вычитаемого в прямом коде заменяем на противоположный. Так как число А2 отрицательное, то (-А2 ) станет положительным.

· Положительные числа остаются без изменения, отрицательные числа переводятся в дополнительный код: А3доп = 11000, А2пр = 00011;

· Суммируем полученные коды:

+ 11000пр

00011доп

11011доп

· Анализируем полученный результат на переполнение (анализируем переносы из старшего значащего разряда и из знакового). Оба анализируемых переноса отсутствуют, следовательно, переполнения нет, результат верный.

· Переводим результат вычитания в прямой код: А3 – А2 = (10101)2пр = (-5)10.

Проверка: (-32,5)10 - (-14,25) = (-17,25)10. С учетом выходного масштаба, равного 2+2 , получаем: (-5)10 * 2+2 = (-20)10. Погрешность обусловлена потерей младших значащих разрядов уменьшаемого и вычитаемого при масштабировании.

2.3. Перемножение чисел с произвольными знаками с фиксированной запятой А1* А3. Умножение необходимо выполнить в прямом и дополнительном кодах.

Умножение будем выполнять первым из четырех известных методов перемножения чисел, применяемых в ЭВМ: умножение, начиная с младших разрядов множителя, со сдвигом суммы частичных произведений вправо при неподвижном множимом. При использовании этого метода все три регистра имеют одинаковую длину, поэтому этот метод нашел наибольшее применение в ЭВМ.

Перед началом умножения сомножители проверяются на равенство нулю. Если обнаруживается нулевой операнд, то умножение не производится, Произведение принимается равным нулю.

· Умножение в прямом коде. В этом случае перемножаются модули чисел, а произведению присваивается знак «плюс», если знаки сомножителей одинаковы, или знак «минус», если знаки разные. |А1| = 00010; |А3 | = 01000. Перемножаем числа целые, следовательно произведение должно быть представлено двойной (2n) разрядностью.

* 00010

01000

+ 0000000000 - значение исходное суммы частичных произведений.

00010 - прибавление множимого, первый значащий разряд множителя равен 1

0001000000 - сумма частичных произведений.

0000100000 - сдвиг вправо на 1 разряд полученной суммы.

0000010000 - дополнительный сдвиг вправо на 1 разряд после умножения на все значащие разряды множителя для правильной постановки результата в формате 2n разрядов (или умножение на знаковый разряд).

Одновременно с умножением на знаковый разряд определяется знак произведения, как сумма по модулю 2 знаков сомножителей:

знак произведения = 1 + 0 = 1.

Произведение А1* А3 = (1000010000)2пр. Проверка: (+8,75)10 * (-32,5)10 = (- 284,37).

(1000010000)2пр. = (- 16)10 * 2+4 = (256)10. Масштаб произведения равен произведению масштабов сомножителей. Погрешность обусловлена потерей младших значащих разрядов сомножителей при масштабировании.

· Умножение в дополнительном коде. При перемножении в ЭВМ целых чисел в дополнительном коде, начиная с младших разрядов множителя, со сдвигом суммы частичных произведений вправо при неподвижном множимом, возможны четыре случая. Рассмотрим особенности алгоритмов перемножения в ЭВМ целых чисел с произвольными знаками, представленных в дополнительном коде.

1случай. Перемножение положительных целых чисел A и B, представленные n -разрядными прямыми кодами (A)пр и (B)пр. Положительное произведение С получается в прямом коде как

(С)пр = (A)пр * (B)пр.

Перемножаем числа целые, следовательно произведение должно быть представлено двойной (2n) разрядностью.

Пример. Множимое А = +7 множитель В = +5 заданы 4-разрядными прямыми двоичными кодами со знаком: (A)пр = 0111 и (B)пр = 0101. Требуется найти их произведение.

Множимое: 0111 Множитель: 0101
Исходная сумма частичных произве- ¯
дений: + 0000  
1-е част-ное произведение 0111  
1-я сумма част-ных произведений 0111  
Сдвинутая 1-я сумма 0011  
Сдвинутая 2-я сумма + 0001 1100 0
3-е част-ное произведение 0111  
3-я сумма част-ных произведений 1000  
Сдвинутая 3-я сумма 0100  
Сдвинутая 4-я сумма 0010 0011 0

Сдвинутая 4-я сумма частичных произведений и есть окончательное произведение [AB]пр = (00100011)2 = (+35)10.

2случай. Множимое А > 0, а множитель В < 0. В арифметическое устройство множимое поступает в прямом коде [A]пр, а отрицательный множитель — в дополнительном коде [B]доп = 2n — | В |, где n разрядность формата множителя. В результате перемножения положительного и отрицательного чисел должно получиться отрицательное произведение в дополнительном коде [C]доп = 22 —[A]пр* [В], однако непосредственное умножение [А]пр на [В]доп без специальной коррекции приводит к псевдопроизведению

[A]пр * (2n - |B|) ¹ 22n – [A]пр * |B| (1)

Для того чтобы получить точное произведение, необходимо в левую часть (1) ввести поправочный член (2n: | A|) * 2n. Тогда

[A]пр * (2n - |B|) + (2n - |A|) = 22n – [A]пр * |B|.

Таким образом, для получения правильного произведения С в дополнительном коде при А > 0 и В < 0 необходимо алгоритм умножения на цифры дополнительного кода множителя строить в соответствии с формулой

[C]доп = [A]пр* [B]доп + [-A]доп * 2n (2)

т.е. перемножаются значащие разряды сомножителей аналогично перемножению положительных чисел, после чего к полученной сумме частичных произведений прибавляется множимое в дополнительном коде (вычитается положительное множимое) – коррекция произведения.

Пример. Множимое А = +7 и множитель В = -5 заданы 4-разрядными двоичными кодами со знаком: [A]пр = 0111 и [B]доп = 1011. Требуется найти их произведение.

 

Множимое: 0111 Множитель: 1011
Исходная сумма част-ных произве-  
дений: +0000 0000 ¯
1-е част-ное произведение 0111  
1-я сумма част-ных произведений 0111  
Сдвинутая 1-я сумма +0011  
2-е част-ное произведение 0111 1000 1
2-я сумма част-ных произведений 1010  
Сдвинутая 2-я сумма 0101  
Сдвинутая 3-я сумма +0010 1010 0
4-е част-ное произведение 0111  
4-я сумма част-ных произведений 1001  
Сдвинутая 4-я сумма +0100  
Коррекция 1001  
Результат 1101  

 

При коррекции прибавляем дополнительный код [-A]доп * 24 = (24 – A) * 24 =

(10010000)2. Полученный результат есть дополнительный код [A*B]доп = (11011101)2 доп =, (10100011)2 пр. = (-35)10.

3случай. Умножение отрицательного множи­мого А < 0 на положительный множитель В > 0, представленных соответственно дополнительным [A]доп и прямым [B]пр. кодами. Непосредственное умножение [А]пр на [В]доп без специальной коррекции приводит как и во втором случае к псевдопроизведению

(2n - |A|)[B]пр ¹ 22n - |A|[B]пр (3)

В данном случае для получения точного произведения в левую часть (3) необходимо ввести поправочный член (2n - |B|) 2n; тогда формула для построения алгоритма умножения будет иметь вид.

[C]доп = [A]доп [B]пр + [- B] 2n (4)

По сравнению с поправкой в (2) одновременный учет поправки в (4) оказывается выполнить гораздо сложнее. Для этого необходимо до конца умножения сохранять целиком множитель и иметь возможность в нужный момент, изменив его знак и образовав дополнительный код [- B]доп, прибавить последний к старшим раз­рядам псевдопроизведения (3). Однако процессы умножения обычно реализуют таким образом, что разряды множителей, на которые произведено умножение, теряются. Поэтому, чтобы не усложнять схемы, поправку, обусловленную выражением (4), вводят в процессе умножения последовательно. Это делается путем искусственного введения на этапах умножения необходимого количества единиц в знаковые разряды сдвигаемых сумм частичных произведений.

В процессе умножения отрицательного множимого очередная сумма частичных произведений получается в дополнительном коде с единицей в знаковом разряде, если при суммировании не возникает переполнение. При сдвиге этой суммы вправо в знаковом разряде появляется нуль. Чтобы сохранить знак минус, в знаковый разряд при сдвиге вводится специальным образом единица, т. е., выполняется так называемый модифицированный сдвиг. Необходимое количество вводимых таким образом в процессе умножения единиц оказывается соответствующим количеству единиц в дополнительном коде множителя [B]доп. При подсуммировании очередного частичного произведения может возникнуть переполнение, сопровождающееся появлением переноса из знакового разряда и в знаковом разряде цифры нуль. В процессе сдвига полученной промежуточной суммы эта единица должна быть помещена в знаковый разряд, хотя она и ее относится к числу корректирующих.

Для исключения потерь единиц, возникающих при переполнениях, либо искусственно вводят дополнительный знаковый разряд, тем самым реализуя накопление отрицательных сумм частных произведений модифицированном дополнительном коде, либо осуществляют предварительной сдвиг множимого вправо, либо приме­няют специальные схемы анализа и коррекции.

Пример. Множимое А = -7 множитель В = +5 заданы 4-разрядными двоичными кодами со знаком: [A]доп = 1001 и [B]пр = 0101. Требуется найти их произведение.

 

Множимое: 1001 Множитель: 0101
Исходная сумма част-ных произве- |
дений: +0000 0000 ¯
1-е частичное произведение 1001  
1-я сумма частичных произведений 1001  
Сдвинутая 1-я сумма (Модифициро 0011  
ванный сдвиг)*  
Сдвинутая 2-я сумма (Модифициро +1110 0100 0
сдвиг)*  
3-е частичное произведение 1001  
3-я сумма част-ных произведений (Пере 1 0111  
полнение!) |  
Сдвинутая 3-я сумма ® 1011  
Сдвинутая 4-я сумма (Модифицированный 1101 1101 0
сдвиг)*  

 

Последняя сдвинутая сумма частичных произведений и есть окончательное произведение [AB] = 11011101, равное десятичному числу (-35).. В примере звездочками отмечены случаи коррекции путем модифицированных сдвигов, соответствующие дополнительному коду поправочного члена в (4): [-B]доп *24 = (24 – B) = 1011 00002.

4 случай. Умножение отрицательного множимого А < 0 на отрицательный множитель В < 0. Непосредственное перемножение дополнительных кодов [А]доп на [В]доп даст также псевдопроизведение

(2n - |A|)*(2n - |B|) = 22n + |A| |B| - |A|2n - |B|2n. (5)

В данном случае для получения правильного произведения необходимо введение в (5) двух поправочных членов:

(2n – [A]доп)2n = |A|*2n и

(2n – [B]доп)2n = |B|2n

Подставляя их в правую часть (3.6), получим

[C] = 22n + |A||B| (6)

Так как при суммировании частных произведений по модулю 2n слагаемое 22n выйдет за пределы разрядной сетки, то фактически будем иметь истинное произведение [С]пр = [|A||В|]пр. По­этому при отрицательных сомножителях алгоритм умножения мо­жет строиться в соответствии с формулой

[С]пр = [A]доп [В]доп + |A|2n+|В|2n (7)

По аналогии с рассмотренным выше первый корректирующий член может быть учтен в конце, а второй — последовательно в ходе умножения.

Пример. Множимое А = -7 и множитель В = -5 заданы 4-разрядными двоичными дополнительными кодами со знаком:[А]доп= 1001 и [B]доп = 1011. Тре­буется найти их произведение

 

Множимое: 1001 Множитель: 1011
Исходная сумма частичных произве- |
дений: +0000 0000 ¯
1-е частичное произведение 1001  
1-я сумма част-ных произведений 1001  
Сдвинутая 1-я сумма (Модифициро 1100  
ванный сдвиг)*  
2-е частичное произведение 1001  
2-я сумма частичное произведение (Пере 1 0101  
полнение!) |  
Сдвинутая 2-я сумма ® 1010  
Сдвинутая 3-я сумма (Модифицированный +1101 0110 0
сдвиг)*  
4-е частичное произведение 1001  
4-я сумма частичных произведений (Пере 1 0110  
полнение!) |  
Сдвинутая 4-я сумма ® +1011  
Коррекция 0111  
Результат 0010  

 

Полученный результат равен десятичному числу (+ 35). Корректирующий член

|B| * 24 = 01010000 учтен в ходе умножения при модифицированных сдви­гах, отмеченных звездочками, а член | A| * 24 = 01110000 - на заключительном этапе.

 

2.4. Деление в ЭВМ чисел с фиксированной запятой с произвольными знаками | A2 |: | A1| в прямом коде.

В этом случае делятся модули чисел|, а частному присваивается знак «плюс», если знаки делимого и делителя одинаковы, или знак «минус», если знаки разные. Перед началом деления делимое и делитель проверяются на равенство нулю. Если обнаруживается нулевой операнд, то деление не производится. При А = 0 частное принимается равным нулю, при В = 0 вырабатывается требование прерывания исполняемой программы (остановки решения некорректно сформулированной задачи).

Деление в ЭВМ представляет собой последовательность вычитаний делителя сначала из делимого, а затем из частичных остатков и сдвигов частного влево, начиная с младших разрядов. Если в результате вычитания делителя из делимого, а затем из частичных остатков делимое или очередной частичный остаток больше делителя, то в очередной разряд частного записывается 1, если делимое или очередной остаток меньше делителя, то в очередной разряд частного заносится ноль. Другими словами, если полученный частичный остаток положителен, то Zi = 1, если отрицателен, то Zi = 0.

В машинах, оперирующих с дробными числами c фиксированной запятой (запятая фиксирована перед старшим разрядом), деление возможно только при выполнении условия: делимое по модулю меньше делителя. В противном случае частное равно или больше единицы и выходит за пределы разрядной сетки.

Условие возможности деления дробных чисел:

В ЭВМ, оперирующих с целыми числами c фиксированной запятой возникает необходимость представления делимого двойной разрядной сеткой, т.е. 2-n разрядами, делитель и частное имеют n разрядов со знаком.

Z = А: В. А = В * Z.

Делитель В и частное Z представлены n разрядами со знаком, делимое представлено в ЭВМ двойной разрядной сеткой (2n разрядами со знаком). Частное должно размещаться в (2n-1) значащих разрядах:

Следовательно, условием возможности деления целых чисел является:

Z < 2n-1.

В ЭВМ применяется два метода деления: д еление с восстановлением остатка и деление без восстановления остатка. На практике чаше используется метод деления без восстановления остатка (вместо трех тактов необходимо два такта для каждого цикла.).

В ЭВМ возможны два способа организации выполнения операции деления. Первый:

делитель – неподвижен, делимое сдвигается влево, частное сдвигается влево; второй:

делимое – неподвижно, делитель сдвигается вправо, частное сдвигается влево. На практике широко используется первый подход.

Рассмотрим последовательность действий ЭВМ при делении модулей целых чисел с произвольными знаками A2пр = 10011; A1пр = 00010 первым способом методом без восстановления остатка. Делимое представляется 2n разрядами (десятью двоичными разрядами)

· Проверка на нуль. Нулевых операндов нет.

· Получение одной цифры частного методом без восстановления остатка при делении модулей чисел требует следующих действий:

а) сдвига делимого или очередного частичного остатка (независимо от его знака) влево на 1 разряд с одновременным сдвигом частного тоже влево на 1 разряд. К сдвинутому остатку присоединяется очередная цифра делимого;

б) вычитания из делимого, затем из очередного частичного остатка делителя, если делимое или остаток положительный, или прибавления к очередному частичному остатку делителя, если остаток отрицательный, и занесения в младший разряд соответствующего частного 1, если текущий остаток больше или равен нуля или 0, если текущий остаток меньше нуля.

Примечание: частное формируется со старших разрядов.

При делении с фиксированной запятой частное помещается на место делимого. Остаток должен иметь тот же знак, что и делимое. Нулевое частное и нулевой остаток всегда положитель



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2016-04-02 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: