yandex rtb 1
ГоловнаЗворотній зв'язок
yande share
Главная->Різні конспекти лекцій->Содержание->2.6. Прямой, обратный и дополнительный коды

Организация ЭВМ

2.6. Прямой, обратный и дополнительный коды

 

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

Для представления чисел со знаком в ЭВМ применяют прямой, обратный и дополнительный коды.

Общая идея построения кодов такова. Код трактуется как число без знака, а диапазон представляемых кодами чисел без знака разбивается на два поддиапазона. Один из них представляет положительные числа, другой – отрицательные. Разбиение выполняется таким образом, чтобы принадлежность к поддиапазону определялась максимально просто.

Наиболее распространенным и удобным является формирование кодов таким образом, чтобы значение старшего разряда указывало на знак представляемых чисел, т.е. использование такого кодирования позволяет говорить о старшем разряде как о знаковом (бит знака) и об остальных как о цифровых разрядах кода.

2.6.1. Прямой код

Это обычный двоичный код, рассмотренный в разделе двоичной системы счисления. Если двоичное число является положительным, то бит знака равен 0, если двоичное число отрицательное, то бит знака равен 1. Цифровые разряды прямого кода содержат модуль представляемого числа, что обеспечивает наглядность представления чисел в прямом коде (ПК).

Рассмотрим однобайтовое представление двоичного числа. Пусть это будет 28(10). В двоичном формате – 0011100(2) (при однобайтовом формате под величину числа отведено 7 разрядов). Двоичное число со знаком будет выглядеть так, как показано на рис. 2.1.

 

 

 

 

 

 

 

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

2.6.2. Обратный код

В обратном коде (ОК), так же как и в прямом коде, для обозначения знака положительного числа используется бит, равный нулю, и знака отрицательного – единица. Обратный код отрицательного двоичного числа формируется дополнением модуля исходного числа нулями до самого старшего разряда модуля, а затем поразрядной заменой всех нулей числа на единицу и всех единиц на нули. В знаковом разряде обратного кода у положительных чисел будет 0, а у отрицательных – 1.

На рис. 2.2 приведен формат однобайтового двоичного числа в обратном коде.

 

 

 

 

 

 

 

 

В общем случае ОК является дополнением модуля исходного числа до наибольшего числа без знака, помещенного в разрядную сетку.

Алгоритм формирования ОК очень прост, при этом ОК позволяет унифицировать операции сложения и вычитания в АЛУ, которые в прямом коде выполняются по-разному. Однако работа с ОК вызывает ряд трудностей. В частности, возникают два нуля: +0 и -0, т.е. в прямом коде (в котором представлены положительные числа) имеет место (+0) = 000...0, а в обратном коде (в котором представлены отрицательные числа): (-0) = 111...1.

Кроме того, в операциях сложения и вычитания требуется дополнительная операция по прибавлению бита переноса в младший разряд суммы. Рассмотрим правила алгебраического сложения в ОК (поскольку А-В=А+(-В)). Алгоритм сложения в ОК содержит:

 

·      сложение кодов, включая знаковый разряд;

·      прибавление переноса к МЗР (младшему значащему разряду) суммы.

 

Пример.

Вычислить выражение -3(10) -2(10).

 

 

Пример.

Вычислить 7(10)-3(10).

 

 

Указанные трудности привели к тому, что в современных ЭВМ абсолютное большинство операций выполняется в дополнительном коде.

2.6.3. Дополнительный код

Дополнительный код (ДК) строится следующим образом. Сначала формируется обратный код (ОК), а затем к младшему разряду (МЗР) добавляют 1. При выполнении арифметических операций положительные числа представляются в прямом коде (ПК), а отрицательные числа – в ДК, причем обратный перевод ДК в ПК осуществляется аналогичными операциями в той же последовательности. На рис. 2.3 рассмотрена цепь преобразований числа из ПК в ДК и обратно в двух вариантах.

 

 

 

 

 

 

 

 

 

 

 

Пример.

Число -5(10) перевести в ДК и обратно (первый вариант).

 

 

Пример.

Число -5(10) перевести в ДК и обратно (второй вариант).

 

 

Использование ДК для представления отрицательных чисел устраняет двусмысленное представление нулевого результата (наличие двух нулей: +0 и -0), так как -0 исчезает.

В общем случае использованием ДК для записи отрицательных чисел можно перекрыть диапазон десятичных чисел от -2k-1 до +2k-1-1, где k – число используемых двоичных разрядов, включая знаковый. Так, с помощью одного байта можно представить десятичные числа от -128 до +127 либо только положительные числа от 0 до 255 (здесь под положительными числами понимаются числа без знака). В табл.2.1 приведены 4-разрядные двоичные числа от 0000 до 1111 и десятичные числа для представления их со знаком и без знака. Из этой таблицы следует, что в формате 4-разрядного двоичного числа могут быть представлены десятичные числа со знаком в диапазоне от -8 до +7 или десятичные числа без знака в диапазоне от 0 до +15.

Оба способа представления чисел широко используются в ЭВМ.

 

Таблица 2.1

Представление десятичных чисел одним полубайтом

4 - разрядное

двоичное число

Десятичные эквиваленты двоичного числа со знаком

Десятичные эквиваленты двоичного числа без знака

0000

+0

0

0001

+1

1

. . . .        ПК

. . .

. . .

0110

+6

6

0111

+7

7

1000

-8

8

1001

-7

9

1010

-6

10

. . . .        ДК

. . .

. . .

1110

-2

14

1111

-1

15

 

В ЭВМ используется быстрый способ формирования ДК.При этом двоичное число просматривается от МЗР к СЗР. Пока встречаются нули, их копируют в разряды результата. Первая встретившаяся единица также копируется в соответствующий разряд, а каждый последующий бит исходного числа заменяется на противоположный (0 на 1, 1 на 0).

 

Пример.

Число -44(10) (10101100 (2)) перевести в ДК и обратно.

 

                                                                                          Проверка:

 

Пример.

Перевести в ДК модуль числа -44.

 

 

Видно, что результаты преобразований обоими методами совпадают.

2.6.4. Сложение и вычитание в дополнительном коде

При выполнении арифметических операций в современных ЭВМ используется представление положительных чисел в прямом коде (ПК), а отрицательных – в обратном (ОК) или в дополнительном (ДК) кодах. Это можно проиллюстрировать схемой на рис. 2.4.

 

 

 

 

 

 

 

 

 

Общее правило. При алгебраическом сложении двух двоичных чисел, пред­ставленных обратным (или дополнительным) кодом, производится арифметическое суммирование этих кодов, включая разряды знаков. При возникновении переноса из разряда знака единица переноса прибавляется к МЗР суммы кодов при использовании ОК и отбрасывается при использовании ДК. В результате получается алгебраическая сумма в обратном (или дополнительном) коде.

Рассмотрим подробнее алгебраическое сложение для случая представления отрицательных чисел в ДК.

При алгебраическом сложении чисел со знаком результатом также является число со знаком. Суммирование происходит по всем разрядам, включая знаковые, которые при этом рассматриваются как старшие. При переносе из старшего разряда единица переноса отбрасывается и возможны два варианта результата:

·      знаковый разряд равен нулю: результат – положительное число в ПК;

·      знаковый разряд равен единице: результат – отрицательное число в ДК.

Для определения абсолютного значения результата его необходимо инвертировать, затем прибавить единицу.

 

Пример.

Вычислить алгебраическую сумму 58-23.

 

 

Пример.

Вычислить алгебраическую сумму 26-34.

 

 

Пример.

Вычислить алгебраическую сумму -5-1.

 

 

2.6.5. Признак переполнения разрядной сетки

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

Признаком переполнения является наличие переноса в знаковый разряд суммы при отсутствии переноса из знакового разряда (положительное переполнение) или наличие переноса из знакового разряда суммы при отсутствии переноса в знаковый разряд (отрицательное переполнение).

При положительном переполнении результат операции положительный, а при отрицательном переполнении – отрицательный.

Если и в знаковый, и из знакового разряда суммы есть переносы или этих переносов нет, то переполнение отсутствует.

Рассмотрим простейшие примеры с трехбитовыми словами. Диапазон чисел, которые они представляют, равен от -4 до +3. В рассматриваемых словах 1 бит знака и 2 информационных бита.

1. Алгебраическое суммирование без переноса.

 

 

Поскольку перенос в знаковый разряд или из знакового разряда суммы отсутствует, то переполнения нет.

Результат – положительное число в ПК, равное 3.

2. Алгебраическое суммирование с двумя переносами.

 

 

Имеются переносы в знаковый разряд и из знакового разряда вычисляемой суммы, поэтому переполнения нет.

Результат – отрицательное число в ДК, равное -4.

3. Алгебраическое суммирование с одним переносом.

(Положительное переполнение).

 

 

При суммировании есть перенос в знаковый разряд суммы, а перенос из знакового разряда отсутствует, т.е. имеет место положительное переполнение, и результат операции положительный.

Число 4 нельзя представить в прямом коде. Формальный результат равен -4.

4. Алгебраическое суммирование с одним переносом.

(Отрицательное переполнение).

 

 

Число -5 нельзя представить 3-битовой комбинацией. Формальный результат равен +3.

Из рассмотренных ранее примеров видно, что арифметические операции в дополнительном коде выполняются достаточно просто. Необходимо только не упускать из виду то, с какими числами происходит работа в данный момент – без знака или со знаком. Поскольку внешний вид обоих чисел одинаков, возможны ошибки.

2.6.6. Деление в дополнительном коде

Деление в дополнительном коде осуществляется по тем же правилам, что были описаны в п. 5.4. разд. "Двоичная арифметика". Но метод деления "столбиком" для ЭВМ не пригоден. Используются более громоздкие методы деления, которые здесь не рассматриваются. Информацию о них можно найти в литературе, приведенной в конце главы.

2.6.7. Правило перевода из дополнительного кода в десятичную систему

Перевод чисел из дополнительного кода в десятичную систему можно проводить по схеме, приведенной на рис. 2.5.

Однако существует прямой способ перевода числа из ДК в десятичную систему без использования промежуточного перевода в ПК.

 

 

 

 

 

 

Рассмотрим машинное слово произвольной длины (рис. 2.6). При прямом способе перевода десятичное число со знаком формируется как сумма разрядов со своими весами и знаками (старший N-й разряд имеет отрицательный вес).

 

 

 

 

 

 

 

 

Проиллюстрируем перевод чисел из ДК в десятичную систему примерами.

 

Пример.

Перевести число 1110 из ДК в десятичную систему.

 

 

Проверим правильность перевода, используя промежуточный перевод в ПК:

 

 

Пример.

Перевести число 101100 из ДК в десятичную систему.

 

101100(2) (ДК) = -25+23+22 = -32+8+4 = -20(10)

 

Проверим:

 

 

2.6.8. Модифицированные коды

Эти коды отличаются от прямого, обратного и дополнительного кодов тем, что на изображение знака отводится два разряда: если число положительное – 00, если число отрицательное – 11. Такие коды оказались удобны (с точки зрения построения АЛУ) для выявления переполнения разрядной сетки. Если знаковые разряды результата принимают значение 00 и 11, то переполнения разрядной сетки не было, а если 01 или 10 – то было переполнение. Вернемся к примерам в п. 2.6.5.

 

 

В предыдущих разделах рассмотрены основные принципы выполнения арифметических операций, из которых видно, что все арифметические операции с двоичными числами могут быть сведены к операциям суммирования в прямом или дополнительном кодах, а также операциям сдвига двоичного числа вправо или влево. Реальные алгоритмы выполнения операций умножения и деления в современных ЭВМ достаточно громоздки и здесь не рассматриваются.

2.6.9. Арифметика повышенной точности

Проблема точности возникает, как правило, при работе с микро- и миниЭВМ, имеющих небольшую длину машинного слова (1-2 байта). Рассмотрим микропроцессор, работающий со словами длины 1 байт. Этот формат позволяет представить целые числа в диапазоне от -128 до 127. Очевидно, что для решения большинства задач такого диапазона чисел недостаточно. Использование двух однобайтовых слов (16 бит) позволяет представить уже числа в диапазоне от -32768 до 32767. Это так называемые числа с двойной точностью. Иногда используются числа тройной точности (1 бит – знак и 23 бита для модуля числа). Это обеспечивает диапазон уже от ‑8388608 до 8388607, т.е. точность существенно повышается.

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

Таким образом, при использовании арифметики тройной точности требуются в три раза большие объем памяти и время на операции сложения по сравнению с арифметикой одинарной точности. Кроме того, в случае возникновения прерываний необходимо временно хранить содержимое регистра переносов (то же самое для вычитания, умножения и деления).

2.7. Представление дробных чисел в ЭВМ. Числа с фиксированной и плавающей запятой

В ЭВМ числа представлены в двоичной форме и под число отводится N разрядов. N-разрядное двоичное число называют машинным словом. Диапазон представления чисел можно расширить за счет использования машинных слов двойной и большей длины. Но увеличение длины слова не может разрешить всех проблем представления чисел. Рассмотрим, как обращаться с дробной частью числа, как представлять очень большие и очень малые числа.

Используют две формы представления чисел:

·      числа с плавающей запятой (точкой), которые сокращенно называются ЧПЗ (ЧПТ);

·      числа с фиксированной запятой (точкой) – ЧФЗ (ЧФТ), которые подразделяются по месту фиксации запятой на:

- слева от СЗР (дробные |X| < 1);

- справа от МЗР (целые).

2.7.1. Числа с фиксированной запятой

Первые ЭВМ были машинами с фиксированной запятой, причем запятая фиксировалась перед старшим разрядом. В настоящее время форму ЧФЗ, как правило, применяют для представления целых чисел (запятая фиксируется после младшего разряда). Следует отметить, что нумерация разрядов в слове может быть разная. Наиболее распространенной в настоящее время является нумерация разрядов справа налево. Между тем, возможна нумерация и слева направо, которая традиционно использовалась в старых мэйнфреймах, например IBM-360/370 и некоторых других ЭВМ, в том числе и миниЭВМ.

Поскольку фиксация точки слева от СЗР в настоящее время практически не используется, рассмотрим только формат представления целых  чисел  на  примере 32-разрядного слова, используемого в мэйнфреймах IBM-360 (рис. 2.7). Аналогичный формат используется и в современных 32-разрядных процессорах, причем нумерация разрядов может быть как справа налево, так и слева направо.

 

 

 

 

 

 

 

 

Целые числа могут быть представлены как в формате слова (32 разряда), так и в формате полуслова (16 разрядов).

Используют два варианта представления целых чисел – со знаком и без знака. В последнем случае все разряды служат для представления модуля числа. В ЭВМ реализуются оба этих варианта в формате слова и полуслова.

В мини- и микроЭВМ разрядность слова обычно меньше (16 бит), но формат представления целых чисел аналогичен рассмотренному (рис. 2.8), за исключением того, что нумерация разрядов в большинстве случаев осуществляется в другую сторону.

Следует иметь в виду, что в мини- и микроЭВМ целые числа могут быть представлены как в формате слова (16 или 8 бит), так и в формате двойного слова (32 или 16 бит). В микроЭВМ целые числа часто представляют без знака в формате слова (8 бит) или двойного слова. В современных ЭВМ, как правило, слова содержат целое число байт, кратное степени двойки (1,2,4… байта).

 

 

 

 

 

 

 

 

 

 

 

 

Рассмотрим диапазон представления чисел с фиксированной запятой (только целых чисел, т.е. точка фиксирована справа от МЗР). Если в разрядной сетке N разрядов, то под модуль числа отводится N-1 разряд (число со знаком). Самое большое по модулю число, записанное в такой сетке, имеет вид

 

 

Следовательно, |X|max = 2N-1 -1 или 0 £|X|£ 2N-1 - 1.

При записи отрицательных чисел в дополнительном коде наибольшее по модулю отрицательное число – это -2N-1. Но модуль этого числа при такой же разрядной сетке (N бит) получить уже нельзя. Поэтому диапазон представления десятичных чисел N-разрядным двоичным числом определяется следующим выражением:

 

-2N-1£X£ 2N-1-1 .

 

В табл. 2.2 приведены диапазоны представления десятичных чисел 8-, 16- и 32- разрядными двоичными числами.

 

Таблица 2.2

N

8

16

32

Xmax

127

32767

2147483647

Xmin

-128

-32768

- 2147483648

 

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

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

2.7.2. Числа с плавающей запятой

Представление чисел в виде ЧПЗ позволяет избавиться от операции масштабирования при вычислениях, поскольку диапазон представляемых чисел существенно расширяется по сравнению с ЧФЗ. Однако в большинстве ЭВМ общего назначения, для целых чисел сохраняется возможность представления в виде ЧФЗ. Операции с ЧФЗ всегда выполняются за меньшее время, чем операции с ЧПЗ. В частности, к операциям с целыми числами сводятся операции над кодами адресов (операции индексной арифметики).

Представление чисел с плавающей запятой в общем случае имеет вид:

 

X = Sp*q;               |q|<1,

 

где    q – мантисса (правильная дробь со знаком),

          p – порядок (целое число со знаком),

          S – основание,

          Sp – характеристика.

В ЭВМ q и p представлены в системе счисления с основанием S в соответствующей двоичной кодировке. Знак числа совпадает со знаком мантиссы. Порядок может быть как положительным, так и отрицательным и определяет положение точки в числе X. Арифметические действия над ЧПЗ требуют помимо действий с мантиссами, определенные операции над порядками (сравнение, вычитание и др.). Для упрощения операций над p их сводят к действиям над целыми положительными числами, применяя представление ЧПЗ со смещенным порядком.

В этом случае к порядку p прибавляют целое число R=2k, где k – число двоичных разрядов, используемых для представления модуля порядка. Смещенный порядок PСМ=P+R всегда больше нуля или равен ему. Для его представления требуется такое же количество двоичных разрядов, как и для представления знака и модуля p.

При фиксированном числе разрядов мантиссы любая величина представляется в ЭВМ нормализованным числом с наибольшей возможной точностью. Число называется нормализованным, если мантисса q удовлетворяет условию 1>|q|³1/S, т.е. старший разряд мантиссы в S-ричной системе счисления отличен от нуля, иначе число не нормализовано. Так, например, в десятичной системе счисления число 0.00726*10-3  не нормализовано, а число 0.726*10-5 – нормализовано.

В процессе вычислений числа могут оказаться ненормализованными. Обычно ЭВМ автоматически нормализует такие числа, выполняя ряд действий. На рис. 2.9 представлен обобщенный формат представления ЧПЗ в микро- и миниЭВМ.

 

 

 

 

 

 

 

Пусть r старших разрядов S-ричной мантиссы равны нулю. Тогда нормализация состоит:

- из сдвиг мантиссы на r разрядов влево;

- уменьшения PСМ на r единиц;

- запись нуля в r младших разрядах мантиссы.

При этом число не изменяется, а условия нормализации выполняются.

 

Пример.

Нормализовать двоичное число.

Ненормализованное двоичное число:

 

 

Нормализованное двоичное число:

 

 

Пример.

Нормализовать двоичное число.

Ненормализованное двоичное число:

 

 

Нормализованное двоичное число:

 

 

Следует иметь в виду, что нормализация может происходить в другую сторону, если в результате выполнения операции слева от точки появилась единица. В этом случае необходимо выполнить следующие операции:

- сдвиг мантиссы на один разряд вправо;

- увеличение PСМ на единицу.

В различных ЭВМ числа с плавающей запятой используются в системах счисления с различными основаниями S, но равными целым степеням числа 2, т.е. S=2W. При этом порядок представляют целым числом, а мантиссу q – числом, в котором группы по W двоичных разрядов изображают цифры мантиссы с основанием системы счисления S=2W. В современных ЭВМ используются, как правило, S = 2, 16.

Использование S>2 позволяет:

- расширить диапазон представления чисел;

- ускорить выполнение операций нормализации, поскольку сдвиг может сразу происходить на несколько разрядов (при S=16 – сдвиг на 4 разряда).

 

Пример.

В результате операции получили (S=16):

 

 

Произведем нормализацию. Для этого q нужно сдвинуть влево на один шестнадцатеричный разряд, т.е. на 4 двоичные единицы, а из P вычесть 1. В результате получим

Итак, диапазон представляемых в ЭВМ чисел с плавающей запятой зависит от основания системы счисления S и числа разрядов, выделенных для P. Точность вычисления для ЧПЗ определяется числом разрядов q. С увеличением числа разрядов q увеличивается точность, но одновременно увеличивается и время выполнения арифметических операций. Ввиду этого использование S, отличного от 2, несколько уменьшает точность вычислений при фиксированном числе двоичных разрядов q. Традиционно шестнадцатеричная арифметика используется в мэйнфреймах.

Задачи, решаемые на ЭВМ, предъявляют различные требования к точности вычисления, поэтому большинство машин общего назначения имеют несколько форматов ЧПЗ с различным числом разрядов q. Рассмотрим только короткие форматы ЧПЗ в ЭВМ с 32-разрядным словом, использующих шестнадцатеричную (S=16) и двоичную (S=2) системы счисления.

Формат ЧПЗ при S=16 представлен на рис. 2.10.

 

 

 

 

 

 

 

 

 

 

Всего под q отведено 24 двоичных разряда. Общая длина слова N – 32 двоичных разряда. Еще есть длинный формат (64 бита) и расширенный (128 бит). Во всех форматах под PСМ отведено по 7 двоичных разрядов (с первого по седьмой). Если бы порядок был несмещенный, то один двоичный разряд отводился бы под знак порядка и k разрядов – под модуль (k = 6). При этом диапазон изменения модуля несмещенного порядка P составил бы 0 ¸ 2k-1 или 0 ¸ 63, а полный диапазон изменения порядка Р = (-64) ¸ (+63). Выражение для смещенного порядка соответственно имеет вид                 .

 

Таким образом, при S=16 диапазон изменения PСМ = 0 ¸ 127.

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

Формат ЧПЗ при S=2 представлен на рис. 2.11.

 

 

 

 

 

 

 

 

Общая длина слова N – 32 двоичных разряда. Обычно еще есть длинный формат, имеющий N = 64 бита. В обоих форматах под смещенный порядок отведено 8 двоичных разрядов. Таким образом, диапазоны изменения смещенного и несмещенного порядков составляют соответственно

PСМ = 0...255 и P = -128...+127 .

 

Поскольку числа в памяти хранятся в нормализованной форме, старший разряд q всегда равен единице, поэтому он не запоминается, а подразумевается., В таких ЭВМ точность представления числа фактически определяется мантиссой q в 24 двоичных разряда (короткий формат) и 56 двоичных разрядов (длинный формат).

Рассмотрим только короткие форматы.

Диапазон представления ЧПЗ определяется значением S и числом разрядов, отведенных под P.

Двоичное основание (S=2):       (k=7) Xmax=2127® 1038  .

Шестнадцатеричное основание (S=16):          (k=6) Xmax=1663® 1076  .

Точность представления ЧПЗ определяется значением S и числом разрядов мантиссы в соответствующей системе счисления. И при S=16, и при S=2 под q отведено фактически 24 двоичных разряда:

·         при S=2: 24 двоичных разряда обеспечивают точность, соответствующую семи десятичным разрядам;

·         при S=16: точность при использовании короткого слова (N = 32) ниже за счет другого способа нормализации, т.е. в q могут быть три нуля слева, поскольку шестнадцатеричное число при этом еще не равно нулю. В двоичных числах слева всегда единица, то есть разрядная сетка используется полнее. Пояснить это можно на примере 8-разрядной сетки:

 

 

При S=16 нормализация не произойдет, так как d1 не равно нулю. Это приведет к потере четырех младших разрядов результата. При S=2 нормализация произойдет и будет потерян только один младший разряд результата. В связи с этим в ЭВМ с S=16 обычно предусматриваются еще длинный и расширенный форматы.

Еще до недавнего времени каждый производитель процессоров пользовался собственным представлением вещественных чисел (чисел с плавающей точкой). За последние несколько лет ситуация изменилась. Большинство поставщиков процессоров в настоящее время для представления вещественных чисел придерживаются стандарта ANSI/IEEE 754-1985 Standard for Binary Floating-Point Arithmetic.

Стандарт описывает два основных формата ЧПЗ: одиночный (single – 32 бита) и двойной (double – 64 бита). В IEEE 754 не указан точный размер расширенного формата, но описаны минимальная точность и размер (79 бит).

Формат числа – структура, определяющая поля, составляющие число с плавающей запятой, их размер, расположение и интерпретацию.

Одиночный формат

Одиночный формат состоит из трех полей: 23-разрядной мантиссы f, 8-раз­рядного смещенного порядка e, знакового бита s (см. рис. 2.12).

 

 

 

 

 

В табл. 2.3 показано соответствие между значениями трех полей и значением числа с плавающей запятой.

Таблица 2.3

Комбинация значений полей

Значение

0 < e < 255

(-1)s × 2e-127 × 1.f

(нормализованные числа)

e= 0; f ¹ 0 (по крайней мере, один бит не нулевой)

(-1)s × 2-126 × 0.f

(ненормализованные числа)

e= 0; f = 0 (все биты нулевые)

(-1)s × 0.0 (ноль со знаком)

e= 255; f = 0 (все биты нулевые)

INF (бесконечность со знаком)

e= 255; f ¹0 (по крайней мере, один бит не нулевой)

NaN (Not-a-Number)

 

Значение неявного бита (старшего разряда мантиссы) прямо не задается, но подразумевается значением порядка. 23-разрядная мантисса вместе с неявным битом обеспечивает точность в 24 разряда.

Двойной формат

Двойной формат состоит из трех полей: 53-разрядной мантиссы f, 11-разрядного смещенного порядка e, знакового бита s. Эти поля хранятся в двух 32-разрядных словах, как показано на рис. 2.13. В x86–архитектуре слово с меньшим адресом содержит младшие разряды мантиссы, в то время как, например, в SPARC– архитектуре младшие разряды мантиссы содержит слово с большим адресом.

 

 

 

 

 

 

 

 

 

В табл. 2.4 показано соответствие между значением трех полей и значением ЧПЗ двойной точности.

 

Таблица 2.4

Комбинация значений полей

Значение

0 < e < 2047

(-1)s × 2e-1023 × 1.f (нормализованное число)

e = 0; f ¹ 0

(-1)s × 2-1022 × 0.f (ненормализованное число)

e = 0; f = 0

(-1)s × 0.0 (ноль со знаком)

s = 0; e = 2047; f = 0

+INF (положительная бесконечность)

s = 1; e = 2047; f = 0

-INF (отрицательная бесконечность)

e = 2047; f ¹ 0

NaN (Not-a-Number)

 

Значение неявного бита (старшего разряда мантиссы) прямо не задается, но подразумевается значением порядка. 53-разрядная мантисса вместе с неявным битом обеспечивает точность в 54 разряда.

Расширенный формат (SPARC– архитектура)

Расширенный формат состоит из трех полей: 112-разрядной мантиссы f, 15-разрядного смещенного порядка e, знакового бита s. Эти поля хранятся в четырех 32-разрядных словах, как показано на рис. 2.14. В SPARC–архитектуре младшие разряды мантиссы содержит слово с большим адресом.

 

 

 

 

 

 

 

 

 

 

 

 

В табл. 2.5 показано соответствие между значением трех полей и значением ЧПЗ расширенного формата для SPARC–архитектуры.

 

Таблица 2.5

Комбинация значений полей

Значение

0 < e < 32767

(-1)s × 2e-16383 × 1.f (нормализованное число)

e = 0; f ¹ 0

(-1)s × 2-16382 × 0.f (ненормализованное число)

e = 0; f = 0

(-1)s × 0.0 (ноль со знаком)

s = 0; e = 32767; f = 0

+INF (положительная бесконечность)

s = 1; e = 32767; f = 0

-INF (отрицательная бесконечность)

e = 32767; f ¹ 0

NaN (Not-a-Number)

 

Расширенный формат (х86– архитектура)

Расширенный формат состоит из 4-ч полей: 63-разрядной мантиссы f, явного старшего значащего бита j, 15-разрядного смещенного порядка e, знакового бита s.

В х86–архитектуре эти поля сохранены в восьми последовательно адресованных 8-разрядных байтах. Однако UNIX System V Application Binary Interface Intel 386 Processor Supplement (Intel ABI) требует, чтобы числа расширенного формата занимали три последовательно адресованных 32-разрядных слова в стеке, оставляя 16 старших бит неиспользованными, как показано на рис. 2.15.

 

 

 

 

 

 

 

 

 

&n

 

15