logo
Informatics

3.4.4. Форматы данных

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

Представление логических кодов. Логические коды могут размещаться в отдельных байтах и в словах. Для их представления используются все разряды: для байта от 0-го до 7-го, для слова - от 0-го до 15-го. Логическими кодами могут быть представлены символьные величины, числа без знака и битовые величины. Символьные величины задаются в коде ASCII (КОИ-7), каждый символ занимает один байт, разряд 7 которого всегда содержит 0. Символы строки размещаются в последовательно-адресуемых байтах оперативной памяти. Числа без знака имеют диапазон представления от 000 до 3778 для байта, от 000000 до 1777778 - для слова. Битовые величины задают значения отдельных разрядов байта или слова.

Представление чисел в формате с фиксированной запятой. Числа с фиксированной запятой могут занимать байт или слово. Если число с фиксированной запятой занимает байт, то для его представления используются разряды с 0-го по 6-й. Разряд 7 называется знаковым. При размещении числа с фиксированной запятой в слове для его представления используются разряды с 0-го по 14-й. Знак числа содержится в разряде 15. Значения знакового разряда: 0 - для положительных чисел; 1 - для отрицательных чисел.

Отрицательные числа в формате с фиксированной запятой представляются в дополнительном коде (посредством операции дополнения до 2-х).

Диапазон представления чисел с фиксированной запятой: для байта - от - 12810 до +12710; для слова - от -3276810 до +3276710. При выполнении операций над числами, представленными в формате с фиксированной запятой, они масштабируются таким образом, чтобы каждое число лежало в интервале (-1, +1). Другими словами, в этом случае ЭВМ оперирует только с числами, по модулю не превосходящими единицы. При этом необходимо следить за тем, чтобы в результате операций результат не получился большим, чем 2k- 1, где k- число разрядов, отведенных для представления в машине. Такая опасность есть при выполнении операций сложения и деления. Опасность представляют также операции вычитания и умножения. При вычитании может получиться так, что разность станет числом меньшим, чем представляется в машине, и результат исчезнет. При многократном умножении (из-за того, что умножаются числа, меньшие единицы) может произойти то же самое. Поэтому при использовании формата представления чисел с фиксированной запятой приходится следить как за случаями возможного переполнения разрядной сетки машины, так и за случаями, связанными с появлением машинного нуля. Необходимость постоянно следить за тем, чтобы числа в машине не вышли за пределы интервала (-1,+1), а также неизбежное в таких устройствах накопление абсолютной погрешности вычислений из-за перемасштабирования, при котором цифры младших разрядов (а именно в них накапливается абсолютная погрешность) передвигаются в старшие разряды, привели к тому, что в универсальных ЭВМ представление чисел с фиксированной запятой практически перестало применяться. Оно сохраняется в специализированных вычислительных системах, где диапазон изменения чисел заранее проанализирован, в некоторых микропроцессорах и микроЭВМ.

Представление чисел в формате с плавающей запятой. Любое вещественное число х, представленное в системе счисления с основанием N, можно записать в виде x=mNp, m - мантисса, p - характеристика (или порядок) числа. Если |m|<1, то запись числа называется нормализованной слева.

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

Нормализованное число одинарной точности, представленное в формате с плавающей запятой, записывается в память следующим образом: знак числа - в бите 15 первого слова (0 - для положительных и 1 - для отрицательных чисел); порядок размещается в битах 7-14 первого слова, а мантисса занимает остальные 23 бита в двух словах. Нормализованное число двойной точности записывается в четыре слова памяти и отличается от представления чисел с одинарной точностью только тем, что продолжение мантиссы размещается в следующих за первым трех последовательных словах памяти, а всего под мантиссу в этом случае отводится 55 бит. Порядок числа с плавающей запятой изменяется в диапазоне от -12810 до +12710 и запоминается увеличенным на 12810. Такой способ представления порядка называется смещенным.

Следует иметь в виду, что хотя для мантиссы отведены 23 разряда для чисел одинарной точности и 55 разрядов - для чисел двойной точности, в операциях участвуют 24 и 56 разрядов соответственно, так как старший разряд мантиссы нормализованного числа не хранится, т.е. имеет место так называемый скрытый разряд. Однако при аппаратном выполнении операций этот разряд автоматически восстанавливается и учитывается при выполнении операций. Порядок числа также учитывает скрытый старший разряд мантиссы.

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

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