Вопрос 4!. Представление чисел с фиксированной точкой. Использование прямого, обратного и дополнительного кодов при выполнении арифметических операций.
Для упрощения арифметических операций числа в ЭВМ представляются специальными кодами — прямым, обратным и дополнительным. При помощи этих кодов операция вычитания (или алгебраического сложения) сводится к арифметическому сложению, упрощается определение знака результата операции, облегчается выработка признаков переполнения разрядной сетки.
Для обозначения знака числа в этих кодах выделяется специальный знаковый разряд, в котором записывается нуль для положительного числа и единица для отрицательного. Знаковый разряд всегда располагается слева от цифровых разрядов. В разрядной сетке ЕС ЭВМ он занимает нулевую позицию.
Прямой код xпр двоичного числа х содержит цифровые разряды, слева от которых записывается знаковый разряд. Сложение в прямом коде чисел, имеющих одинаковые знаки, выполняется достаточно просто. Цифровые разряды чисел складываются по правилам арифметики и сумме присваивается код знака слагаемых. Значительно сложнее реализуется в прямом коде операция алгебраического сложения, т. е. сложения чисел, имеющих разные знаки. В этом случае приходится определять большее по модулю число, производить вычитание чисел и присваивать разности знак большего по модулю числа. Данная операция сводится к простому арифметическому сложению при помощи обратного или дополнительного кода, которыми представляются отрицательные числа.
Обратный код хобр отрицательного числа х получается по следующему правилу: в знаковый разряд числа записывается единица, в цифровых разрядах нули заменяются единицами, а единицы — нулями.
Дополнительный код хдоп отрицательного числа х получается из обратного кода лг0бр путем прибавления единицы к младшему разряду.
В качестве примера представим целые двоичные числа х = +1101 и у=-1001 в прямом, обратном и дополнительном кодах. Записи положительного числа х в прямом, обратном и дополнительном кодах совпадают: хпр = хобр = хдоп = 0,1101. Отрицательное число у в этих кодах представляется по-разному. В прямом коде к цифровым разрядам числа у добавляется слева единица знакового разряда, т. е. yпр=1.1001. В обратном коде цифровые разряды прямого кода заменяются на инверсные, т. е. уобр =1.0110. Дополнительный код улоп получается из обратного добавлением единицы к младшему разряду, т. е. yдоп=1.0111
Для представления отрицательных чисел используется дополнительный код. Дополнительный код позволяет заменить арифметическую операцию вычитания операцией сложения, что существенно упрощает работу процессора и увеличивает его быстродействие.
Вопрос 5*!. Формы представления чисел в ЭВМ. Представление чисел с плавающей точкой. Арифметические операции.
Неудобство представления чисел в форме с фиксированной точкой проявляется при решении задач, в которых фигурируют как очень малые так и очень большие числа В конкретных физических, математических и других задачах диапазон изменения величин может составлять, например от 10-30 до 1030. Можно убедиться, что в представлении с фиксированной запятой понадобились бы двоичные слова длинной около 256 бит (32 байт), по 128 бит на целую и дробную части. Однако работа ЭВМ с операндами такой длины была бы крайне неэффективной. Точность числа определяется не его длиной, а количеством верных значащих цифр.
Для однозначности представления чисел с плавающей точкой используется нормализованная форма:
A = m x q p,
- где:
m - мантиса числа,
q - основание системы счисления,
p - порядок числа.
При этом q-1 |m| <1.
Это означает, что мантиса должна быть дробью и иметь первую после запятой цифру, отличную от нуля.
Число в форме с плавающей точкой занимает в памяти ЭВМ четыре или восемь байт (больше крайне редко). При записи числа с плавающей точкой выделяются разряды для хранения мантиссы, знака порядка, порядка
Преобразуем десятичное число 555,55, записанное в естественной форме, в экспоненциальную форму с нормализованной мантиссой:
555,55 = 0,55555 * 103 .
Здесь нормализованная мантисса: m = 0,55555, порядок: n = 3.
Так как числа с разными порядками суммировать нельзя, то для сложения двух чисел в нормальной форме представления необходимо выполнить операцию выравнивания порядков.
где m1, m2 - мантиссы, р1 и р2 - порядки.
Необходимо предварительно привести их к общему порядку, то есть преобразовать одно из слагаемых следующим образом:
Робщ = max ( p1*p2 )
В = (m2`)*qробщ
C = A+B = m*qp = m1*qробщ+ m2`*qробщ= (m1+(m2`))*qробщ
Преобразованная мантисса должна быть правильной дробью, поэтому преобразованию всегда подвергается меньшее слагаемое, так как в противном случае может произойти переполнение разрядной сетки мантиссы преобразованного числа.
Меньший порядок увеличивается до большего, а мантисса преобразуемого числа сдвигается вправо на соответствующее число разрядов. С этой целью производится вычитание порядков чисел. Знак и модуль разности будут определять, соответственно, какое из слагаемых нужно преобразовать и на сколько нужно сдвинуть мантиссу.
Пример:
0.10112*2-1 + 0.10112*21 = 21*(00.00102 + 00.11012) = 01.00002*21 = 0.10002*22
Мантисса может переполнить разрядную сетку, при этом использование модифицированных кодов позволяет не только отметить факт переполнения, но и восстановить правильный результат. Это обеспечивается сдвигом мантиссы на одну позицию в сторону младших разрядов и увеличением порядка на 1.
Операция сложения для чисел, представленных в форме с плавающей точкой
При сложении чисел в нормальной форме можно выделить 4 этапа:
1) Уравниваются порядки слагаемых.
2) Производится преобразование мантисс слагаемых в один из модифицированных кодов, дополнительный или обратный, затем производится сложение мантисс по правилу сложения чисел с плавающей точкой.
3) В случае необходимости производится нормализация результатов.
4) Результат переводится в прямой код, ему приписывается общий порядок и округляется.
Операция умножения для чисел, представленных в форме с плавающей точкой, протекает аналогично, с той лишь разницей, что при этом добавляется операция определения порядка произведения алгебраическим сложением порядков сомножителей и проводится, если необходимо, нормализация результирующей мантиссы с соответствующим изменением порядка произведения.
Если при суммировании порядков возникло переполнение и порядок произведения получился отрицательный, то это означает, что искомое произведение меньше минимально представляемого в ЭВМ числа, и тогда в качестве результата операции может быть записан нуль без перемножения мантисс. Если же возникло переполнение для положительного порядка* то результат при этом может все-таки находиться в диапазоне чисел, представляемых в ЭВМ. Это объясняется тем, что при умножении мантисс происходит нарушение нормализации вправо, поэтому после нормализации мантиссы переполнение в порядке произведения.
Операция деления чисел, представленных в форме с плавающей точкой, выполняется путем деления мантиссы делимого на мантиссу делителя; при этом порядок частного определяется разностью порядков делимого и делителя. Полученное частное нормализуется и ему присваивается знак плюс, если делимое и делитель имеют одинаковые знаки, и знак минус, если их знаки разные. Деление мантисс выполняется аналогично делению целых чисел с фиксированной точкой. Отличие состоит только в том, что делимое берется такой же разрядности, как и делитель. При этом полагается, что в младшей половине разрядов делимого содержатся нули. После сдвига влево очередного остатка освобождающийся разряд заполняется нулем и деление выполняется точно так же как и для целых чисел