- •Выполнение работы
- •Для заданного шестнадцатеричного числа a выполнить следующую последовательность преобразований:
- •Представить десятичные числа
- •Выполнить, используя результаты работы по заданию 2, сложение чисел с фиксированной запятой:
- •Выполнить, используя результаты работы по заданию 2, вычитание чисел с фиксированной запятой:
- •Выполнить, используя результаты работы по заданию 2, перемножение чисел с произвольными знаками с фиксированной запятой:
- •Выполнить, используя результаты работы по заданию 3, арифметическую операцию сложения чисел
- •Выполнить, используя результаты работы по заданию 3, арифметическую операцию вычитания чисел:
- •Выполнить, используя результаты работы по заданию 3, арифметическую операцию умножения чисел:
Выполнить, используя результаты работы по заданию 3, арифметическую операцию умножения чисел:
(C1) * (C2),
представленных с плавающей запятой в формате n = 5 со знаком, k = 4 со знаком.
Решение
С1 : m1 пр = 11000, p1 = 0011.
С2 : m2 пр = 11111, p2 = 0101.
Найдем произведение мантисс m1 * m2. Прежде всего, проверим их на равенство нулю. Так как мантиссы чисел С1 и С2 не равны 0, то переходим к следующему этапу.
Умножение мантисс производим методом умножения, начиная с младших разрядов множителя, со сдвигом суммы частичных произведений вправо при неподвижном множимом.
Перемножаем модули мантисс, а произведению присваивает знак «плюс», если знаки сомножителей одинаковы, или знак «минус», если знаки разные.
|m1пр| = 01000 – множимое;
|m2пр| = 01111 – множитель.
Перемножаемые дробные числа, поэтому для представления результата умножения достаточно одинарной разрядности.
+ |
0 |
0 |
0 |
0 |
0 |
|
исходное значение суммы частичных произведений (Sm)Sm после обработки 0-го разряда |
0 |
1 |
0 |
0 |
0 |
1 |
0-й (младший) разряд множителя (|m2|) m2| равен 1, прибавляем |m1| |
|
→ |
0 |
1 |
0 |
0 |
0 |
|
Sm, сдвиг на 1 разряд вправо |
+ |
0 |
0 |
1 |
0 |
0 |
|
Sm после обработки 0-го разряда |
0 |
1 |
0 |
0 |
0 |
|
1-й разряд | m2| равен 1, прибавляем |m1| |
|
→ |
0 |
1 |
1 |
0 |
0 |
|
Sm, сдвиг на 1 разряд вправо |
+ |
0 |
0 |
1 |
1 |
0 |
|
Sm после обработки 1-го разряда |
0 |
1 |
0 |
0 |
0 |
|
2-й разряд | m2| равен 1, прибавляем |m1| |
|
→ |
0 |
1 |
1 |
1 |
0 |
|
Sm, сдвиг на 1 разряд вправо |
+ |
0 |
0 |
1 |
1 |
1 |
|
Sm после обработки 2-го разряда |
0 |
1 |
0 |
0 |
0 |
|
3-й разряд | m2| равен 1, прибавляем |m1| |
|
→ |
0 |
1 |
1 |
1 |
1 |
|
Sm, сдвиг на 1 разряд вправо |
|
0 |
0 |
1 |
1 |
1 |
|
Sm после обработки 3-го разряда |
|mрез пр| = 00111.
Так как сомножители имеют одинаковые знаки, то произведению присваиваем знак «плюс», т.е.
mрез пр = 00111.
Проверка полученной мантиссы на нормализацию показывает, что имеет место нарушение нормализации вправо (старший разряд мантиссы равен нулю).
Исправим это нарушение, сдвинув мантиссу результата на один разряд влево, и вычтем единицу из порядка одного из сомножителей, например, p1:
m’рез пр = 01110, p’1пр = p1пр – 1 = 0010.
Найдем порядок результата как сумму порядков сомножителей.
р’1пр = 0010; р2gh = 0101; pрез пр = р’1пр + р2пр
-
+
0
0
1
0
пр
0
1
0
1
пр
0
1
1
1
пр
Переполнения при суммировании порядков нет, так как не было сформировано ни одного переноса: ни из старшего разряда в знаковый и ни из знакового разряда.
pрез пр = 0111.
Запишем результат умножения чисел С1 * С2:
mрез пр = 01110, pрез пр = 0111.
С1 * С2 = +0,111*2+111 = (+1110000)2 = (–112)10.
Выполним проверку в десятичной системе счисления:
(–4,125)10 * (–30,25)10 = (–124,78125)10.
Погрешность объясняется ограниченностью разрядной сетки.
