- •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. Организация обработки данных с плавающей точкой в цпос с фт
Ext msp lsp
Десятичный эквивалент
_23+ 22+ 21+ 20+ 2-3+ 2-5= -0,84375
S _ знак
Рис. 3.15 Сохранение числа в формате “расширенное слово”
(иллюстрация примера 2)
3. 7.7. Представление данных
при целочисленной арифметике
В процессорах с ФТ и целочисленной арифметикой (см. разд.3.7.5) для представления исходных данных вещественного типа ( вещественных чисел) используют ихцелочисленные эквиваленты. Они определяются в результате маcштабирования, которое выполняется пользователем перед составлением программы. Масштабирование можно выполнить одним из двух способов:
первый способ – из всей совокупности исходных данных вещественного типа выбирается максимальное по модулю число и приравнивается к максимально допустимому по модулю целомучислу в формате “слово”
(машинной единице); значение остальных исходных данных вещественного типа находится из соответствующей пропорции; дробная часть отбрасывается или округляется пользователем;
второй способ – производится предварительное масштабирование
данных вещественного типа так, чтобы они не превосходили 1 по модулю; затем осуществляется их масштабирование к машинной единице по первому способу.
На практике чаще масштабируют по второму способу. Масштабировать следует к максимальному по модулю значению.
При целочисленной арифметике исходные данные целого типа не масштабируются, если они не превосходят машинной единицы. Иначе масштабирование предусматривается пользователем.
При целочисленной арифметике результаты обработки (конечные данные) получаются также в виде целочисленных эквивалентов, поэтому, если необходимо знать истинные значения результатов, требуется выполнить процедуру обратного масштабирования – деление целочисленных эквивалентов на значение машинной единицы.
Пример 1. В процессоре ( с ФТ, целочисленной арифметикой, формат представления исходных данных и результатов – слово длиной 16 битов) выполняется программа преобразования массива из 100 (N=100) коэффициентовai (ai– дробные числа) в другие, вычисленные по заданному алгоритму,100 коэффициентовbi
Дополнительно среди коэффициентов biрассматривается количествоLкоэффициентов, значение которых удовлетворяет некоторому условию алгоритма. Рассмотрим:
Представление в программе (с помощью соответствующих директив языка ассемблера) исходных данных –
коэффициентов aiи их количестваN.
Определение истинных значений коэффициентов bi, а также количестваLпо рассчитанным в процессоре значениям.
Решение задачи иллюстрирует табл. 3.6. Итак:
В процессорах с целочисленной арифметикой при выполнении арифметических операций все числа воспринимаются как целые, поэтому дробные числа необходимо заменить ихцелочисленными эквивалентами, в примере:
ai Ai,
где Ai– целочисленный эквивалентai.
Целочисленные эквиваленты Aiкоэффициентовai(все коэффициенты по модулю меньше 1) находятся из пропорции
1 – 32768
ai–Ai,
откуда Ai= 32768.ai, например,A0 = 32768. 0,57 = 18677,76 или, после округления,a0 = 18678 и т. д. (см. табл.3.6). В программе истинные значения коэффициентовaiзаменяются их целочисленными эквивалентамиAi.
Количество N– целое число, поэтому его целочисленный эквивалент определять не требуется.
В результате выполнения программы вычислены целочисленные эквиваленты Bi истинных коэффициентовbi, а также значениеL– целое число.
Истинные значения коэффициентов biнаходятся по их целочисленным эквивалентамBiиз пропорции
1 – 32768
bi –Bi ,
откуда bi=Bi/ 32768, например,b0=B0/ 32768 = 2457 / 32768 = 0,0749816 (с точностью до 7 значащих цифр после запятой) и т. д. (см. табл.3.6).
Количество L– целое число, поэтому в результате вычислений выдается его истинное значение.
Таблица 3. 6. Истинные значения и целочисленные эквиваленты
Исходные данные |
Результаты вычислений | ||||
Имя |
Истинное значение |
Целочисленный эквивалент |
Имя |
Целочисленный эквивалент |
Истинное значение |
а0 |
0,57 |
18678 |
b0 |
2457 |
0,0749816 |
a1 |
- 0,13895 |
_ 4553 |
b1 |
31099 |
0,9490661 |
a2 |
0,3 |
9830 |
b2 |
_123 |
_0,0037536 |
... |
... |
... |
... |
... |
... |
a99 |
0,85701 |
28083 |
b99 |
15348 |
0,4683837 |
N |
100 |
Не вычисляется |
L |
55 |
55 |
Представление данных при
дробной арифметике
При дробной арифметике (см. разд.3.7.5) значения исходных данных вещественного типа не масштабируются, если они не превосходят единицы по модулю, т. к. машинная единица, в отличие от ЦПОС с целочисленной арифметикой, равна 0,999... = 1. Это основное преимущество дробной арифметики. Если хотя бы одно из значений вещественных данных превосходит 1 по модулю, пользователь должен предусмотреть предварительное масштабирование.
При дробной арифметике следует масштабировать значения исходных данных целого типа для получения ихдробных эквивалентов. В этом случае максимальное по модулю целое число приравнивается к 1, а значения остальных данных целого типа находятся из пропорции.
Для конечных данных (результатов) целого типа, если необходимо знать истинные знчения результатов, требуется выполнить процедуру обратного масштабирования. Следует иметь в виду, что в алгоритмах ЦОС
Объем вычислений с данными целого типа, как правило, невелик.
Пример 2. Задача, поставленная в примере 1 из разд. 3.7.7, решается в процессоре сдробной арифметикой; формат представления исходных данных и результатов – слово длиной 16 битов.
Решение задачи иллюстрируется табл. 3.7.
В процессорах с дробной арифметикой при выполнении арифметических операций все числа
воспринимаются как дробные, поэтому, если все исходные данные вещественного типа по модулю меньше
1 (как в нашем случае) и их не надо заменять дробными эквивалентами (табл.3.7).
Количество N– целое число, поэтому необходимо вычислить его дробный эквивалент, который в данном
случае равен
Nэкв= 0,999...= 1,
поскольку целое число одно, его дробный эквивалент соответствует машинной единице 0,999... = 1.
Полученный дробный эквивалент Nэквиспользуется в программе вместо соответствующего целого числа
N.
В результате выполнения программы вычислены истинные значения коэффициентов bi (дробные числа,
вопрос о точности вычислений не рассматривается) и дробный эквивалент целого числаLэкв= 0,549
(табл. 3.7);
1 _100 (N)
Lэкв_L,
откуда L=Lэкв .100 = 0,5499.100 = 54,99 = 55 (см. табл. 3.7).
Таблица3.7.Истинные значения и дробные эквиваленты
Исходные данные |
Результаты вычислений | ||||
Имя |
Истинное значение |
Дробный эквивалент |
Имя |
Дробный эквивалент |
Истинное значение |
а0 |
0,57 |
Не вычисляется |
b0 |
Вычисляются сразу истинные |
0,0749 |
a1 |
- 0,13895 |
|
b1 |
значения |
0,9490 |
a2 |
0,3 |
|
b2 |
коэффициентов |
-0,0037 |
... |
... |
... |
... |
... |
... |
a99 |
0,85701 |
|
b99 |
|
0,4683 |
N |
100 |
0,999... = 1 |
L |
0,549 |
55 |
Арифметические операции
в дополнительном коде
Основным преимуществом дополнительного кода является то, что все арифметические операции с числами независимо от их типа, целые или дробные, выполняются одинаково – как с беззнаковыми числами, когда знаковый разряд воспринимается как старший значащий. Результат арифметической операции представлен также в дополнительном коле.
Рассмотрим особенности выполнения операций сложения, вычитания и умножения при использовании целочисленной и дробной арифметик.