Лекция № 14 (90-минут)
Тема:Принципы выполнения арифметических операций над числами в форме с плавающей точкой
Пусть требуется выполнить некоторую арифметическую операцию над операндами X и Y в форме с плавающей точкой:
. (5.12)
. (5.13)
Результатом операции будет число:
. (5.14)
Порядки чисел X и Y представлены p разрядами, а мантиссы – (m-разрядные) правильные дроби, то есть,
, . (5.15)
5.5 Сложение и вычитание чисел в форме с плавающей точкой
Представим операцию сложения в виде:
Z = X + Y. (5.16)
Пусть Рх > Py, тогда:
. (5.17)
где .
. (5.18)
где ; .
Операция сложения и вычитания операндов в форме с плавающей точкой включает следующие этапы:
- выравнивание порядков операндов и определение порядка результата;
- сложение и вычитание мантисс;
- нормализация результата;
- округление результата.
Выравнивание порядков необходимо для того, чтобы цифры мантисс с определенными весами располагались в соответствующих им разрядах регистров. Выполняется такая операция путем сдвига вправо мантиссы того операнда, порядок которого меньше. (Не выравнивать в сторону меньшего порядка! — теряем значащие цифры). Алгоритм выравнивания порядков сводится к следующему:
- сформировать разность порядков .
- если D>0, то сдвинуть на один разряд вправо мантиссу (Y) и вычесть единицу из разности порядков( D); если D<0, то сдвинуть на один разряд вправо мантиссу (X) и прибавить единицу к разности порядков (D);
- пункт 2 алгоритма повторять до тех пор, пока выполняется неравенство D≠0; при D=0 выравнивание порядков считают законченным.
Так как порядки операндов могут иметь разные знаки, то для представления их разности (D) может понадобиться (p+1) разряд. Абсолютная величина (D) может превышать число разрядов (m), отводимых для представления мантисс. В этом случае все разряды сдвигаемой вправо мантиссы выходят за пределы разрядной сетки и далее, при сложении и вычитании мантисс, абсолютная величина мантиссы, которая оставалась неподвижной, не меняется. Следовательно, при выполнении условия |D|>m можно прекратить выравнивание порядков и присвоить окончательному результату значение операнда, мантисса которого не сдвигалась.
Определять порядок результата удобно вместе с выравниванием порядков операндов. Порядок результата равен порядку большего по абсолютной величине операнда (то есть, того, мантисса которого не сдвигалась при выравнивании порядков).
Сложение и вычитание мантисс, для представления которых обычно используется прямой код, выполняется по тем же алгоритмам, что и чисел в форме с фиксированной точкой. Однако переполнение разрядной сетки здесь не приводит к остановке вычислений, что, как правило, имеет место при выполнении операций над числами в форме с фиксированной точкой. Наличие переполнения учитывается далее при нормализации результата.
Поскольку при выравнивании порядков возможна потеря части разрядов мантиссы одного из операндов, то мантисса результата может быть получена с погрешностью, по абсолютной величине почти равной единице младшего разряда. Однако среднее значение погрешности при этом равно нулю, если считать, что знаки "+" и "-" операндов и заданных операций появляются с равными вероятностями. С целью уменьшения максимальной абсолютной величины этой погрешности может быть введена операция округления мантиссы результата.
Необходимость нормализации результата обусловлена тем, что при мантиссах операндов, удовлетворяющих условиям нормализации, в зависимости от знака операции, мантисса результата может находиться в пределах 0≤|z|<2.
Таким образом, при сложении и вычитании мантисс может произойти нарушение нормализации мантиссы результата на один разряд влево или на произвольное число разрядов вправо. Нормализация результата выполняется следующим образом:
- если 1≤|z|<2 (нормализация нарушена влево), то сдвинуть мантиссу результата на один разряд вправо и прибавить единицу к порядку результата.
При этом может возникнуть переполнение порядков.
- при сложении мантисс близких по модулю друг к другу, но имеющих разные знаки может возникнуть нарушение нормализации вправо на любое число разрядов (вплоть до получения нулевой мантиссы).
Если 0<|z|<1/2, то сдвинуть мантиссу влево и вычесть единицу из порядка результата. Эти действия продолжать до тех пор, пока сохраняются условия указанного выше неравенства (если мантисса результата представлена прямым кодом, то до тех пор, пока в старшем разряде мантиссы в результате сдвига появится единица). В этом случае может возникнуть антипереполнение.
Если |z|=0, то результату присваивается машинный нуль (потеря значимости), а выполнять нормализацию нет необходимости.
При использовании модифицированного дополнительного кода для вычитания левое нарушение нормализации обнаруживается так же, как и в предыдущем случае, а правое нарушение — по комбинациям 00,0... и 11,11... .
5.6 Умножение и деление чисел в форме с плавающей точкой
Представим операцию умножения в виде:
Z = X · Y. (5.19)
тогда:
. (5.20)
где: ; .
Знак произведения определяют путем суммирования по модулю 2 цифр в знаковых разрядах сомножителей: .
При умножении чисел в форме с плавающей запятой порядок результата определяется путем сложения порядков сомножителей. Для определения мантиссы результата производят умножение мантисс операндов как чисел с фиксированной точкой по любому из рассмотренных алгоритмов. Мантисса произведения может оказаться ненормализованной, причем возможно только правое нарушение нормализации на один разряд. В этом случае мантиссу надо удвоить, сдвинув ее на один разряд влево, а из порядка произведения вычесть единицу.
Представим операцию деления в виде:
Z = X/Y. (5.21)
Следует помнить, что при делении чисел с плавающей точкой остатка не бывает:
(5.22)
где: ; .
Знак частного обычно определяют путем суммирования по (модулю 2) цифр в знаковых разрядах делимого и делителя. При делении чисел в форме с плавающей точкой порядок частного находят как разность порядков операндов (из порядка делимого вычитается порядок делителя). Мантиссу частного получают в результате деления абсолютных величин мантисс операндов. При делении нормализованных мантисс, как правильных дробей, может иметь место нарушение нормализации влево на один разряд.
Таким образом, при умножении и делении чисел в форме с плавающей точкой над порядками выполняются только операции сложения и вычитания.
Для этого удобно использовать дополнительные коды. В процессе выполнения операций над порядками возможно как переполнение порядков, так и антипереполнение.
Общий алгоритм выполнения операций умножения и деления:
- определение знака результата;
- сложение и вычитание порядков;
- умножение и деление мантисс;
- нормализация результата;
- округление результата.
Как отмечалось ранее, необходимость округления результата вызвана тем, что при нормализации результата может выполняться правый сдвиг мантиссы результата и младший ее разряд при этом выходит за пределы разрядной сетки. Если считать, что результат представлен прямым кодом, то отбрасывание этого разряда вносит в абсолютную величину результата либо нулевую погрешность (если отбрасывается цифра 0), либо погрешность, равную 1/2 веса младшего разряда (если отбрасывается цифра 1). Для того, чтобы погрешность по абсолютной величине результата была знакопеременной и ее среднее значение в достаточно большой последовательности операций было равно нулю, округление следует производить следующим образом. Если за пределы разрядной сетки сдвигается цифра (1), то младший разряд мантиссы результата устанавливают в единицу независимо от того, какая цифра была в этом разряде ранее. В другом случае значение младшего разряда не меняют.
Пусть( хm) - младшая цифра мантиссы результата до округления, (х'm) - та же цифра после округления, (xm+1) - цифра мантиссы, выходящая за пределы разрядной сетки при округлении, (d) - погрешность округления. Тогда все возможные ситуации при округлении иллюстрируются табл. 11.4, из которой видно, что при таком округлении погрешность абсолютной величины мантиссы результата будет равна 0 или ±1/2 веса младшего разряда, а ее среднее значение равно нулю.
Таблица 5.3 – Результаты округления мантиссы результата
xm | xm+1 | x’m | d |
+(1/2)2-m | |||
-(1/2)2-m |
5.7 Алгоритмы выполнения операций над числами в форме с плавающей точкой, в представлении IEEE-754
Вещественное число может быть представлено в каком-либо формате стандарта IEEE-754 следующим образом:
. (5.23)
С учетом условия нормализации ( ), минимальные и максимальные абсолютные значения мантисс:
. (5.24)
. (5.25)
Сложение, вычитание, умножение и деление вещественных чисел в формате IEEE-754 осуществляется в соответствии с рассмотренными ранее алгоритмами. Поскольку в форматах хранятся не истинные значения порядков, а смещенные коды порядков, имеют место некоторые особенности, связанные с выполнением операций над смещенными порядками. Кроме того, должен учитываться факт наличия бита ( ) мантиссы.
При сложение и вычитании сравнение смещенных порядков осуществляется путем вычитания смещенных кодов как целых беззнаковых чисел. Сложение мантисс выполняется по правилам сложения целых знаковых чисел. Если получен отрицательный результат, то он представлен в дополнительном коде и его необходимо преобразовать в прямой код.
При умножении смещенный порядок произведения определяется в соответствии с рассмотренными выше правилами. Мантисса произведения может иметь нарушение нормализации.
Проанализируем различные ситуации:
1. .
Нет нарушения нормализации.
2.
Нет нарушения нормализации.
3. .
Здесь имеет место нарушение нормализации влево на 1 разряд.
При делении смещенный порядок частного определяется в соответствии с рассмотренными выше правилами. Мантисса частного может иметь нарушение нормализации. Проанализируем различные ситуации:
1. .
Нет нарушения нормализации.
2. ; 0,5<Z<1
Нарушение нормализации вправо на 1 разряд.
3. ; 1<Z<2
Нет нарушения нормализации.
4. .
Нет нарушения нормализации.