
- •Глава I. Организация вычислений в эвм
- •1. Позиционные системы счисления
- •2. Алгоритмы перевода чисел из одной системы счисления в другую
- •3. Формы представления чисел в двоичной системе счисления
- •4. Операции сложения чисел в прямом, обратном и дополнительном кодах с фиксированной запятой
- •4.2. Умножение чисел в дополнительных кодах
- •4.3. Операция умножения над обратными кодами сомножителей
- •4.6. Выполнение операции сложения над числами с плавающей запятой
- •5. Форматы данных
- •6. Стадии выполнения команды и способы адресации
4.6. Выполнение операции сложения над числами с плавающей запятой
Рассмотрим специфику операции сложение-вычитание с плавающей запятой. Число Х, представленное в форме с плавающей запятой, имеет вид:
,
где p – порядок числа, М – мантисса, k – основание системы счисления. Если каждому числу Х однозначно соответствует пара p, k, то 1>|M|k-1, а число Х называется нормализованным.
Порядок и мантисса числа записываются в своих разрядах в виде чисел с фиксированной запятой; мантисса – в виде дробного числа с запятой перед старшим из основных разрядов, порядок – в виде целого числа с запятой после младшего разряда. Структура представления в ЭВМ числа с плавающей запятой более подробно рассмотрена в гл.I п.1. Разрядная сетка машины с плавающей запятой имеет следующий вид:
-
m
0
-1 - n
Порядок
Мантисса
В нормализованных числах мантисса содержит максимальное количество значащих цифр, поэтому нормализованные числа представляются с максимальной точностью.
Выполнение операции сложения-вычитания чисел с плавающей запятой состоит из следующих этапов:
- выравнивание порядков;
- суммирование мантисс;
- определение порядка результата;
- нормализация результата;
- округление результата.
Выравнивание порядков осуществляется путем сдвига вправо мантиссы числа с меньшим порядком. Так как сдвиг вправо эквивалентен делению мантиссы на k, то при каждом сдвиге порядок должен увеличиваться на 1. Порядок результата принимается равным порядку большего числа. В результате алгебраического сложения мантисс после выравнивания порядка получают мантиссу суммы (разности). Полученная сумма (разность) нормализуется.
Для выполнения операции выравнивания порядка используется сумматор порядков, в котором из порядка первого числа вычитают порядок второго числа. По знаку разности определяют больший порядок, а абсолютная величина разности позволяет определить необходимое число сдвигов.
При сравнении порядков возможны пять случаев:
а) px
- py
n,
где n
– число разрядов мантиссы, при этом в
качестве результата сразу берется
первое слагаемое, поскольку при
выравнивании порядков все разряды
мантиссы второго слагаемого принимают
нулевые значения;
б) px-py<n– второе слагаемое является результатом суммирования;
в) px-py= 0 – приступают к суммированию мантисс;
г) px - py = k1 (k1 < n) – мантисса второго слагаемого сдвигается на k1 разрядов вправо, затем мантиссы суммируются;
д) py - px = k2 (k2 < n) – мантисса первого слагаемого сдвигается на k2 разрядов вправо, затем мантиссы суммируются.
Мантиссы, полученные после выравнивания порядков, складываются как двоичные числа с фиксированной запятой. При этом результат может оказаться ненормализованным. Если используются модифицированные коды, то переполнение (левое нарушение нормализации) определяется по комбинациям цифр 01 и 10 в знаковых разрядах суммы мантисс. Нормализация заключается при этом в сдвиге мантиссы результата вправо на 1 разряд. Правое нарушение нормализации определяется по комбинациям цифр 00,0 (11,1) в старшем и знаковом разрядах мантиссы результата. При этом нормализация результата заключается в сдвиге мантиссы результата влево до тех пор, пока не появится “1” (“0”) в старшем разряде сетки мантиссы.
При нормализации сдвиг вправо результата и отбрасывание его младшего разряда могут привести к большой положительной ошибке. Для уменьшения погрешности применяют округление, состоящее в использовании дополнительного разряда со стороны младших разрядов. Если в дополнительном разряде будет 1, то ее добавляют в младший основной разряд. Вследствие этого погрешность будет закономерной и не больше 2-n веса младшего разряда.
4.7. Операции умножения и деления чисел с плавающей запятой
Числа X, Y, представленные с плавающей запятой, имеют соответствующие порядки px и py, которые целые и могут лежать в диапазоне - (2+m-1) p +(2+m-1). Величины pmin= -(2+m-1) и pmax= +(2+m-1) представляют собой минимальный и максимальный порядки, которые могут быть размещены в разрядной сетке порядков. Если при микрооперациях с порядками порядок получается меньше чем pmin, то число считается “малым” (отрицательное переполнение разрядной сетки порядков) и его приравнивают к нулю. Если порядок после микрооперации получается больше pmax, то число получается “большим” и не может разместиться в разрядной сетке (положительное переполнение) ЭВМ. Поэтому результат считается неверным, вычисления прекращают, выдавая сигнал переполнения.
Операции умножения и деления с плавающей запятой легко сводятся к операциям с фиксированной запятой:
Z=XY=2Px + Py (MX · MY), Z=X/Y=2Px - Py (MX / MY).
При умножении (делении) порядки складываются (вычитаются) по правилам сложения с фиксированной запятой после младшего разряда, а мантиссы умножаются (делятся) по правилам умножения (деления) чисел с фиксированной запятой перед старшим разрядом. При микрооперациях над порядками проверяются отрицательное и положительное переполнение. После микроопераций над мантиссами проверяется нормализация мантиссы результата. При умножении нормализованных мантисс результат может получится ненормализованным (правое нарушение нормализации). Например, в прямом коде MX=0.10...0, MY=0.10...0, MZ=0.010...0, где |MZ|<1/2. В этом случае необходимо результат MZ сдвинуть влево, от порядка результата pZ вычесть единицу, проверить на отрицательное переполнение порядка.
При делении может происходить левое нарушение нормализации, когда после пробного вычитания z0=1. В этом случае мантиссу результата сдвигают вправо, к порядку прибавляют единицу, проверяют на положительное переполнение.