Арифметические операции над двоичными числами с плавающей точкой
В современных ЭВМ числа с плавающей точкой хранятся в памяти машин, имея мантиссу и порядок (характеристику) в прямом коде и нормализованном виде. Все арифметические действия над этими числами выполняются так же, как это делается с ними, если они представлены в полулогарифмической форме (мантисса и десятичный порядок) в десятичной системе счисления. Порядки и мантиссы обрабатываются раздельно.
Сложение (вычитание). Операция сложения (вычитания) производится в следующей последовательности.
1. Слагаемые представляются в формате с плавающей точкой.
2. Находится разность порядков слагаемых путем их вычитания р = р1-р2.
3. Если разность порядков равна нулю, то это значит, что одноименные разряды мантисс имеют одинаковые веса (двоичный порядок). В противном случае должно проводиться выравнивание порядков.
4. Для выравнивания порядков порядок меньшего числа увеличивается на разность порядков р, а его мантисса сдвигается вправо на разность порядков р.
5. Порядок результата берется равным большему порядку.
6. Выравнивается разрядная сетка мантисс слагаемых путем дописывания незначащих нулей справа. Мантиссы слагаемых представляются в обратном или дополнительном модифицированном коде. Операция вычитания заменяется операцией сложения с отрицательным числом. Операция суммирования мантисс выполняется по правилам суммирования чисел в формате с фиксированной точкой.
6. Если мантисса результата не нормализована, то осуществляются ее нормализация и коррекция значений порядка.
Нормализация результата выполняется в двух случаях:
1) цифры в знаковых разрядах не совпадают;
2) цифры знакового разряда совпадают с цифрой старшего разряда мантиссы.
Если цифры знакового порядка совпадают с цифрой старшего разряда мантиссы, то мантисса сдвигается на один разряд влево, а порядок уменьшается на единицу.
Если цифры в знаковых разрядах не совпадают, то мантисса сдвигаетсяна один разряд вправо, а порядок увеличивается на на единицу.
7. Результат переводится в прямой код, к нему приписывается общий порядок слагаемых и выполняется округление мантиссы результата.
Пример 1. А10 =6,25, В10=20,5
1. Записываем числа в двоичном коде:
А2=110,01 В2=10100,1
2. Записываем числа в в формате с плавающей запятой
[А]пр = 0 011 0 11001
[В]пр= 0 101 0 101001
3. Сравниваем порядки:
ра-рв=010
Разность порядков не равна нулю, производим выравнивание порядков и корректируем мантиссу
[А]пр = 0 101 0 0011001
[В]пр= 0 101 0 101001
4. Выравниваем разрядную сетку мантиссы:
[А]пр = 0 101 0 0011001
[В]пр= 0 101 0 1010010
5. Выполняем операцию сложения в дополнительном коде:
[ма]дп =00 0011001
+
[мв]дп =00 1010010
[мс]дп = 00 1101011
Мантисс не требует нормализации
6. Записываем результат в формате с плавающей запятой
0 101 0 1101011
7. Переводим результат в двоичный и десятичные коды
С2= 11010,11 С10=16+8+2+0,5+0,25=26,75
Пример 2. А10 =36,5, В10=32,0
2. Записываем числа в двоичном коде:
А2=100100,1 В2=100000,0
2. Записываем числа в в формате с плавающей запятой
[А]пр = 0 110 0 1001001
[В]пр= 0 110 0 100100
4. Сравниваем порядки:
ра-рв=000
Разность порядков равна нулю, коррекция не требуется.
4. Выравниваем разрядную сетку мантиссы:
[А]пр = 0 110 0 1001001
[В]пр= 0 110 0 1000000
8. Выполняем операцию сложения в дополнительном коде:
[ма]дп =00 1001001
+
[мв]дп =00 1000000
[мс]дп = 01 0001001
Необходима нормализация мантиссы, так как цифры в знаковых разрядах не совпадают. Выполняем сдвиг мантиссы вправо на один разряд, а порядок увеличиваем на единицу.
ра-рв=111 [мс]дп = 00 10001001
9. Записываем результат в формате с плавающей запятой
0 111 0 10001001
10. Переводим результат в двоичный и десятичные коды
С2= 1000100,1 С10=64+4+0,5=68,5
Пример 3. А10 =17,0, В10= -7,0
1. Записываем числа в двоичном коде:
А2=10001,0 В2=111,0
2. Записываем числа в в формате с плавающей запятой
[А]пр = 0 101 0 10001
[В]пр= 0 011 1 111
5. Сравниваем порядки:
ра-рв=010
Разность порядков не равна нулю, требуется коррекция.
4. Выравниваем разрядную сетку мантиссы:
[А]пр = 0 101 0 10001
[В]пр= 0 101 1 00111
2. Выполняем операцию сложения в дополнительном коде:
[ма]дп =00 10001
+
[мв]дп =11 11001
[мс]дп = 00 01010
Необходима нормализация мантиссы, так как цифры в знаковых разрядах не совпадают. Выполняем сдвиг мантиссы влево на один разряд, а порядок уменьшаем на единицу.
ра-рв=100 [мс]дп = 00 1010
3. Записываем результат в формате с плавающей запятой
0 100 0 1010
4. Переводим результат в двоичный и десятичные коды С2= 1010 С10=8+2=10
<== предыдущая лекция | | | следующая лекция ==> |
Законы алгебры логики | | |
Дата добавления: 2016-10-17; просмотров: 5573;