Вопрос 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) Результат переводится в прямой код, ему приписывается общий порядок и округляется.

Операция умножения для чисел, представленных в форме с плаваю­щей точкой, протекает аналогично, с той лишь разницей, что при этом добавляется операция опреде­ления порядка произведения алгебраическим сложе­нием порядков сомножителей и проводится, если необходимо, нормализация результирующей ман­тиссы с соответствующим изменением порядка произ­ведения.

Если при суммировании порядков возникло пере­полнение и порядок произведения получился отри­цательный, то это означает, что искомое произведение меньше минимально представляемого в ЭВМ числа, и тогда в качестве результата операции может быть записан нуль без перемножения мантисс. Если же возникло переполнение для положительного порядка* то результат при этом может все-таки находиться в диапазоне чисел, представляемых в ЭВМ. Это объяс­няется тем, что при умножении мантисс происходит нарушение нормализации вправо, поэтому после нормализации мантиссы переполнение в порядке про­изведения.

Операция деления чисел, представленных в форме с плавающей точкой, выполняется путем деления мантиссы делимого на мантиссу делителя; при этом порядок частного опреде­ляется разностью порядков делимого и делителя. Полученное частное нормализуется и ему присваивает­ся знак плюс, если делимое и делитель имеют одина­ковые знаки, и знак минус, если их знаки разные. Деление мантисс выполняется аналогично делению целых чисел с фиксированной точкой. Отличие состоит только в том, что делимое берется такой же разряд­ности, как и делитель. При этом полагается, что в младшей половине разрядов делимого содержатся нули. После сдвига влево очередного остатка ос­вобождающийся разряд заполняется нулем и деле­ние выполняется точно так же как и для целых чисел