- •3.1 Представление данных в алгоритме.
- •3.2 Представление данных в программе
- •3.3 Представление данных в цпос
- •3.5. Форматы данных
- •3.7.3. Представление вещественных чисел
- •3. 7. 4. Шестнадцатеричный эквивалент представления данных
- •3. 7. 5. Целочисленная и дробная арифметики
- •3.7.6. Коды чисел
- •Прямой код
- •Дополнительный код
- •Двойное слово
- •Msp lsp
- •Ext msp lsp
- •3. 7.7. Представление данных
- •Сложение и вычитание
- •Умножение
- •Замечание
- •3.7.10. Преобразование форматов в цпос с фиксированной точкой
- •3.7.11. Диапазон, динамический диапазон
- •3.7.12. Увеличение динамического диапазона
- •3. 8. 2. Форма представления данных с плавающей точкой
- •3.8.4. Преобразование форматов в цпос с плавающей точкой
- •3.8.5. Нормализованные числа j
- •3,8.6. Специально данные
- •3.8.7. Арифметические операции над данными с плавающей точкой
- •3.8.8. Диапазон, динамический диапазон и точность представления чисел с плавающей точкой
- •3.9. Сравнение цпос с фиксированной и плавающей точками
- •3.10. Организация обработки данных с плавающей точкой в цпос с фт
Умножение
Как видно из рис.3.16 и 3.17, при сложении и вычитании формат представления исходных данных и результата _одинаковый. На рис. 3.18 приведен пример умножения двух беззнаковых чисел, представленных в формате “слово” длиной 4 бита в дополнительном коде. Произведение этих чисел должно иметь длину 4 .2 _ 1 = 7
битов без потери точности.
Алгоритмы умножения, реализованные в различных процессорах, отличаются от общепринятого в двоичной
арифметике; один из возможных алгоритмов будет рассмотрен далее. Сначала обсудим результат умножения.
0 1 0 0
X
0 0 1 1
---------------
0 1 0 0
0 1 0 0
0 0 0 0
0 0 0 0
----------------------
0 0 0 1 1 0 0
Рис. 3. 18.Умножение в дополнительном коде
Без потери точности произведение двух беззнаковых чисел, представленных в формате “слово” длиной nбитов, должно иметь длину (2n_1) битов. В процессорах с ФТ результат умножения размещается либо в формате “двойное слово”MSP:LSPдлиной 2nбитов, либо вMSP:LSPчасти расширенного слова также длиной 2n.
Отсюда возникает проблема “ лишнего” бита. Кроме того, появляется вопрос о сохранении вычисленного произведения в формате “слово” длиной nбитов – какую из частей произведенияMSPилиLSPследует сохранить? Выясним эти моменты на одном примере умножения (рис.3.18) при различных трактовках типа данных и различных арифметиках в процессоре. Рассмотрим следующие четыре ситуации:
Умножение целыхчисел прицелочисленной арифметике (рис.3.19):
“лишний” бит используется как старший бит MSBв словеMSP:LSPдля хранениярасширения знака результата;
Десятичные
3 2 1 0 эквиваленты
-
0
1
0
0
22= 4
X
3 2 1 0
-
1
1
0
1
_23 + 22+ 20=_ 3
7 6 5 4 3 2 1 0
-
1
1
1
1
0
1
0
0
_27+ 26 + 25+ 24+ 22=_12
Расширение Значащие цифры
знака
MSP LSP
Рис 3.19. Умножение целых чисел при целочисленной арифметике
знаковыми становятся два старших бита,значащими – остальные биты;
если длина каждого из сомножителей не превышает n/2, результат размещается в младшем словеLSP,и его можно сохранить в формате “слово”без потерь; старшее словоMSPслужит для расширения знака;
если длина сомножителей превышает n/2, для хранения результата потребуетсядваслова и специальная организация дальнейшей обработки.
Умножение дробных чисел прицелочисленнойарифметике; в этом случае дробные числа заменяются ихцелочисленнымиэквивалентами (рис.3.20):
“лишний” бит используется, как старший битMSBв словеMSP:LSPдля хранениярасширения
знакарезультата;
знаковыми становятсядва старших бита,значащими – остальные биты;
в формате “слово” сохраняется старшеесловоMSPрезультата,младшее словоLSPотбрасывается; перед
выполнением дальнейших операций, для устранения лишнего знакового бита, содержимое двойного слова
MSP:LSPследует сдвинуть на один бит влево.
3. Умножение дробных чисел придробной арифметике (рис. 3.21)
“лишний” бит используется, как младший бит LSBв словеMSP:LSPдля хранения нуля;LSB= 0;
знаковым остается один старший бит, значащими -- остальные биты;
для хранения результата в формате “слово” выбирается старшее слово MSP, младшее словоLSP
отбрасывается.
4. Умножение целых чисел при дробной арифметике; в этом случае целые числа заменяются их дробными
экивалентами (3.22):
“лишний” бит используется, как младший битLSBв словеMSP:LSPдля хранения нуля;LSB= 0;
знаковым остается один старший бит,значащими– остальные битыбез младшего битаLSB; после сдвига вправо на 1 бит получается результат точно такой же, как целое число при целочисленной арифметике – с расширением знака в двух старших битах словаMSP:LSP(сравните с рис. 3.19).
Отметим, что отсутствие ”лишнего” знакового бита в представлении результата умножения дробных чисел при дробной арифметике, наряду с отсутствием необходимости масштабирования данных, считается преимуществом дробной арифметики.
Теперь рассмотрим один из наиболее расппространенных алгоритмов умножения, реализованный в большинстве процессоров с ФТ.
Алгоритм умножениядвух беззнаковых двоичных чиселxиy,представленных в дополнительном коде в формате “слово” длинойn.
Десятичные Машинная
эквиваленты единица
3 2 1 0
-
0
1
0
0
27/ 8 = 0,5 23 = 8
X
3 2 1 0
-
1
1
0
1
_23/8 + 22/8 + 20/8 =_0, 375
7 6 5 4 3 2 1 0
1 |
1 |
1 |
1 |
0 |
1 |
0 |
0 |
Расширение Значащие биты целочисленного
знака эквивалента дробного числа
MSPLSP
После сдвига MSP:LSPна 1 бит влево 27 = 128
7 6 5 4 3 2 1 0
1 |
1 |
1 |
0 |
1 |
0 |
0 |
0 |
_27/128 + 26/ 128 + 25/ 128 + 23/128= _0,1875 –точный результат
|
SЗначащие биты целочисленного
эквивалента дробного числа
MSPLSP
23= 8
3 2 1 0
1 |
1 |
1 |
0 |
_23/8 + 22/8 + 21/8 =_0,125_приближенный результат
|
S
S– знак
Рис. 3. 20. Умножение дробных чисел при целочисленной арифметике
3 2 1 0 Десятичные эквиваленты
-
0
1
0
0
2-1= 0,5
X
3 2 1 0
-
1
1
0
1
_20+ 2-1+2-3= 0,375
7 6 5 4 3 2 1 0
1 |
1 |
1 |
0 |
1 |
0 |
0 |
0 |
_20 + 2-1 + 2-2 + 2-4 = _ 0,1875 – точный результат
|
SЗначащие биты дробного числа
MSP LSP
3 2 1 0
1 |
1 |
1 |
0 |
_20+ 2-1+2-2=_0,25 – приближенный результат
|
S
S –знак
Рис. 3. 21.Умножение дробных чисел при дробной арифметике
x = x0 x1 … xi … xn-1;
y = y0 y1 … yi … yn-1,
где xiиyi– значенияi–xбитов,
включает следующие шаги:
1. Подготовка к циклу:
i=n_1;
начальная сумма локальных произведений si+1 = 0 …0 (формат “слово ” длинойn)
2. Тело цикла:
вычисляется сумма локальных произведений si=s i+1 +y.xi,
еслиxi= 0, значениеsiне меняется;
если xi= 1, к значениюsiприбавляетсяy, при этом оба слагаемых выровнены по
левому краю;
выполняется расширение знака суммы si на один бит;
присваивается i=i_ 1.
Десятичные эквиваленты
Машинная единица равна 1, что соответствует
maxпо модулю целому числу
23=8
3 2 1 0
-
0
1
0
0
2-1.8=4
X
3 2 1 0
-
1
1
0
1
-20.8+2-1.8+2-3.8=-3
76 5 4 3 2 1 0
1 |
1 |
1 |
0 |
1 |
0 |
0 |
0 |
Машинная единица равна 1, что соответствует
maxпо модулю целому числу
26/2=64
SЗначащие биты дробного Не
эквивалента целого числа учитывается
MSP LSP
После сдвига MSP:LSPна 1 бит вправо
7 6 5 4 3 2 1 0
1 |
1 |
1 |
1 |
0 |
1 |
0 |
0 |
_20 . 64+2-1 . 64 + 2-2 . 64 + 2-4 . 64 = _ 12 точный результат
|
Расширение Значащие биты дробного эквивалента
Sцелого числа
MSP LSP
Рис.3.22. Умножение целых чисел при дробной арифметике
3. Проверка окончания цикла:
цикл повторяется до i= 1 включительно.
4. Выход из цикла:
при i= 0 вычисляется разностьs0 =s1_y.x0:
если x0 = 0, значениеs0не меняется;
если x0= 1, из значенияs0вычитаетсяy; при этом вычитаемое и уменьшаемое
выровнены по левому краю;
разность s0равна произведению беззнаковых чиселxиyв дополнительном коде
и имеет длину (2n_1) битов, где старший бит – знаковый;
конечный результат формируется в формате “двойное слово” длиной 2n; при
этом “лишний” бит используется по – разному в зависимости от типа арифметики,
а именно:
“лишний” бит применяется, как старший бит MSBдля расширения знака, при
целочисленной арифметике;
“лишний” бит играет роль младшего бита LSB(LSB= 0) при дробной арифметике.