Главная > Схемотехника > Искусство схемотехники, Т.2
<< Предыдущий параграф
Следующий параграф >>
<< Предыдущий параграф Следующий параграф >>
Макеты страниц

10.23. Форматы чисел

Формат байтов (или слов), получаемых из частотомера в рассмотренном примере, отличается от внутримашинного двоичного формата; частотомер образует двоично-кодированные десятичные коды, упакованные по две цифры в байте (или четыре цифры в слове). Чтобы с этими числами можно было выполнять какие-то вычисления, их следует преобразовать в целые числа или в числа с плавающей точкой (хотя в системе команд микропроцессора предусмотрены и команды с «десятичной коррекцией», позволяющие выполнять арифметические операции непосредственно над упакованными двоично-кодированными десятичными числами). Рассмотрим форматы чисел, обычно используемые в компьютерах (рис. 10.24), предмет, кратко затронутый нами в начале гл. 8.

Целые числа. Целые числа (integer) со знаком всегда представляются, как дополнение до 2 и занимают 1,2 или 4 байт (см. рис. 10.24). Старший бит является знаковым, хотя дополнение до двух не совпадает с представлением в виде знака и числа (т. е. — 1 записывается, как 11111111, а не 10000001; см. разд. 8.03). Дополнение до 2 можно представить себе, как «смещенное» двоичноес инвертированным старшим битом; но можно рассматривать его и как целое число со значением бит, указанным на рис. 10.24. Многие компьютеры позволяют объявлять переменные, как целые без знака в дополнение к объявлению целых со знаком в виде дополнения до 2. Двухбайтовое беззнаковое целое может иметь значение от 0 до 65535.

Числа с плавающей точкой.

Числа с плавающей точкой, называемые также действительными числами (real), обычно занимают 32 бит («одинарная точность») или 64 бит («двойная точность), однако иногда для промежуточных результатов вычислений используется дополнительный -бит формат. К сожалению, имеется несколько употребительных представлений этих чисел. Наиболее распространен формат IEEE (официальное название ANSI/IEEE который реализован почти во всех микропроцессорных наборах с плавающей точкой (включая Intel 8087/287/287, Motorola 68881, а также наборы фирм AMD, Weitek и др.) и по этой причине является стандартным для микрокомпьютеров, использующих эти наборы (в том числе ).

На рис. 10.24 показаны -бит и -бит форматы IEEE. -бит формат одинарной точности предусматривает 1 знаковый бит, 8 бит порядка и 23 бит мантиссы. Порядок определяет степень 2, на которую следует умножить мантиссу (см. ниже). Порядок «смещен» путем прибавления 127, так что поле порядка 01111111 соответствует порядку 0; в результате диапазон порядка составляет от —127 до + 128.

Рис. 10.24. Форматы чисел. S-знак.

Мантисса также записывается любопытным способом, который был впервые использован фирмой DEC в своем формате с плавающей точкой. Двоичное число с плавающей точкой всегда можно записать в виде , где мантисса (по основанию 2) («значащая ), а е - порядок (степень 2). Для того чтобы получить при заданном числе бит мантиссы максимальную точность, она «нормализуется» путем сдвига влево (с соответствующим декрементом порядка), пока лидирующий бит не станет равен 1, в результате чего мантисса представляется в виде . Далее, используется прием «скрытого бита». Поскольку результирующая значащая часть мантиссы всегда имеет ненулевой старший бит, хранить его в памяти было бы избыточно; вместо lfff можно записать просто , где лидирующая 1 подразумевается. В результате точность числа возрастает, так как его представление увеличивается на 1 бит, образуя диапазон от до

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

Формат IEEE с двойной точностью образуется аналогично, но точность мантиссы более чем удваивается (увеличиваясь на 29 бит), а порядок получает дополнительные 3 бит. Диапазон чисел указан на рисунке.

Формат IEEE допускает также хранение ненормализованных чисел, что несколько увеличивает диапазон со стороны маленьких чисел (за счет уменьшения точности); «денормализованные» числа могут доходить до величины . Стандарт также определяет нуль таким образом, есть 2 нуля, и —0), бесконечность все единицы, поэтому оба знака), а также любопытный класс зарезервированных величин, имеющих официальное название «не число» Number).

Другой важный микрокомпьютерный формат чисел с плавающей точкой принадлежит фирме DEC и используется в компьютерах (а также в их предках, мини-ЭВМ VAX и ). Он почти совпадает со стандартом IEEE, имея то же число бит в порядке и мантиссе (включая использование скрытого бита) чисел с одинарной точностью. Отличия заключаются в другом значении смещения (128 вместо 127), а также в отсутствии лидирующих бит в мантиссе, которая представляется в виде ,lfff (со скрытой 1). DEC определяет только один нуль (все биты которого равны 0); и не допускает ненормализованных чисел и бесконечности; имеются, однако, величины, аналогичные «не числам» IEEE. DEC также определяет -бит формат удвоенной точности.

Последние два формата, приведенные на рис. 10.24, используются не в микрокомпьютерах, а в больших ЭВМ или в машинах специального назначения. Формат в течение некоторого времени использовался в универсальных ЭВМ фирмы IBM и даже в некоторых мини-ЭВМ, например, Nova фирмы Data General.

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

Упражнение 10.10. Чтобы понять смысл последней фразы, напишите представление числа 1.0 в формате IBM. После этого напишите следующее меньшее число в том же формате.

Использование в формате IBM числа 16 в качестве основания увеличивает динамический диапазон, но уменьшает точность. Более того, точность несколько изменяется от числа к числу из-за переменного количества лидирующих двоичных нулей; это явление известно, как «качание» (wobble). В формате IBM отсутствуют «не числа» и бесконечность, и имеется только один нуль (все биты нули); не нормализованные числа не допускаются. Имеется формат IBM и для чисел с двойной точностью (64 бит).

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

Хранение чисел в памяти.

Разработчики микропроцессоров любят выражать свою индивидуальность, предусматривая хранение чисел в памяти в своеобразном порядке. Микропроцессоры , следовательно, и компьютеры IBM PC и совместимые с ними) записывают числа в память, начиная с самого младшего байта, который располагается в байте памяти с наименьшим номером; для семейства 68000 характерен обратный порядок. Вот счастье-то!

Преобразование данных в процессе ввода-вывода.

Нам пришлось уже обсуждать форматы данных в контексте аппаратного интерфейса, который выдавал упакованные двоично-десятичные числа. Каков наиболее оптимальный способ работы с

-разрядными данными, получаемыми из такого интерфейса?

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

<< Предыдущий параграф Следующий параграф >>
Оглавление