Рис. 4.2. Формат целых чисел без знака
Целые числа без знака используются в программировании для представления тех числовых объектов, которые принципиально не могут быть отрицательными. Это, например, адреса ячеек памяти, счетчики повторений циклов и другие подобные объекты. Длина формата обычно составляет один, два или четыре байта.
В формате целого числа со знаком один из разрядов отводится для кодирования знака числа S (рис. 4.3). Обычно им является старший (левый) бит, а стандартное кодирование знака имеет такой вид: S = 0 – число положительное, S = 1 – число отрицательное.
Рис. 4.3. Формат целых знаковых чисел
Существуют два способа кодирования целых знаковых чисел: в прямом и дополнительном коде.
Прямой код состоит в том, что знак числа помещается в старший разряд, а остальные биты используются для кодирования абсолютного значения числа. Диапазон представимых чисел составляет от -(2n-1-1) до +(2n-1-1). Число нуль при этом может быть как положительным (ему соответствует набор бит 00...00), так и отрицательным (10...00). Последнее обстоятельство является недостатком такого представления числа, поэтому прямой код получил ограниченное применение в ЭВМ.
Дополнительный код состоит в том, что общий формат знаковых целых чисел сохраняется, но меняется кодирование отрицательных чисел. Положительные числа от 0 до 2n-1 представляются в прямом коде, а для отрицательных чисел используется особое кодирование: число –1 кодируется битовым набором 11...11, а число –2n-1 – битовым набором 10...00.
Получение дополнительного кода отрицательного числа -x производится по следующему правилу:
xдоп.код. 2n x ,где n – количество двоичных разрядов.
Дополнительный код позволяет иметь единственное представление нуля 00...00. Диапазон представимых чисел при этом от -2n-1 до +(2n-1-1). Очевидно, что диапазоны отрицательных и положительных чисел не являются симметричными. Обычная длина такого формата один, два или четыре байта.
Рассмотренные форматы вещественных чисел с фиксированной точкой имеют ограничения на диапазон принимаемых значений и представимые числовые значения (только целые числа). Однако существует немного прикладных задач, для решения которых достаточно оперировать только с целыми числами. Указанные ограничения преодолеваются использованием формата чисел с плавающей точкой. Этот формат иначе называется также полулогарифмическим или экспоненциальным форматом. В соответствии с этим форматом число должно быть представлено в виде
(M)E().
Здесь число изображается как произведение некоторого другого числа на степень числа 10, являющегося основанием десятичной системы счисления. Число M называется мантиссой или значащей частью числа. Мантисса может быть любым знаковым числом, ее знак определяет знак всего числа. Число называется порядком или экспонентой. Порядок может быть только целым знаковым числом. Буква Е обозначает основание десятичной системы счисления и разделяет мантиссу и порядок. Чтобы сообщить о представлении числа с повышенной точностью вместо буквы Е записывается буква D (от Double – удвоенный); в этом случае для мантиссы отводится больше разрядов.
Порядок определяет фактическое положение десятичной точки вместо положения, которое она занимает в изображении мантиссы. Если порядок положительный, точка перемещается ("плывет" – отсюда и название формата) вправо на число разрядов, равное значению порядка. Если порядок отрицательный, точка перемещается ("плывет") влево.
Пример. Запись вещественных чисел:
–0.0956Е+2 = –9.56 = –0.0956·10+2 ;
+1.289Е-3 = +0.001289 = +1.289·Е10–3 .
Чтобы исключить неоднозначность записи чисел, во всех ЭВМ принято нормализованное представление чисел с плавающей точкой, требующее, чтобы мантисса была правильной дробью, а старшая цифра ее отличалась от нуля. Кроме однозначности нормализованное представление обеспечивает также сохранение максимального количества значащих цифр мантиссы в результатах машинных операций. Классический формат числа с плавающей точкой представлен на рис. 4.4.
Рис. 4.4. Классический формат числа с плавающей точкой
Формат состоит из четырех полей:
• код знака мантиссы Sм (он совпадает со знаком всего числа);
• код мантиссы длиной n бит, являющейся правильной дробью;
• код знака порядка Sп;
• код порядка длиной p бит, являющегося целым числом.
Мантисса и порядок представляются в прямом коде.
Количество бит мантиссы и порядка существенно влияют на диапазон и точность представимых нормализованных чисел. Диапазон представимых чисел определяется только количеством битов порядка. Для расчета минимального и максимального чисел предназначены следующие формулы: Xmin 22p ;
p p
Xmax (1 2n )22 1 22 1.
С увеличением числа бит порядка диапазон представимых чисел очень быстро расширяется как в область очень больших, так и в область очень малых значений: p6 Zmin 264 1019 ;
Zmax 263 1019 ;
p7 Zmin 2128 1038 ;
Zmax 2128 1038 ; p8 Zmin 2256 1076 ;
Zmax 2256 1076.
Таким образом, увеличение длины порядка всего на один бит удваивает показатель степени у 10 для минимального и максимального представимых чисел.
Количество бит мантиссы определяет точность представления чисел. Точность определяется максимальным значением относительной ошибки e, вычисляемой по формуле emax 2n1. При этом имеют место следующие соотношения: n 24emax 223 107 ; n 32emax 231 109 ;
55 1016 ;n 56emax 2 n64emax 263 1019.
Про относительную ошибку 10N говорят, что числа представимы с точностью N-го десятичного разряда либо точность представления чисел составляет N десятичных разрядов (цифр). Например, длина мантиссы 56 бит соответствует точности представления чисел до 16-го десятичного разряда.
В рассматриваемом формате нуль является особым числом. Оно представляется нулями во всех двоичных разрядах и называется истинным нулем. Существует также понятие машинного нуля, под которым понимают минимальное представимое число Zmin, то есть машинный нуль может быть и положительным, и отрицательным.
В некоторых машинных операциях может получиться число, мантисса которого равна нулю. Независимо от значения порядка такое число приравнивается нулю и называется псевдонулем.
Типы и форматы данных, которыми оперируют современные вычислительные системы, установлены международным стандартом IEEE-854.
В языках программирования традиционно существуют две разновидности формата чисел с плавающей точкой: нормальной точности (длина формата 4 байта) и удвоенной точности (длина формата 8 байт). Точность представления таких чисел составляет 6-7 и 15-16 десятичных разрядов соответственно.
Арифметический сопроцессор IBM-совместимых ПЭВМ может работать с вещественными числами расширенной точности, занимающими в памяти 10 байт. Точность представления таких чисел составляет 19-20 десятичных разрядов.
Необходимо отметить, что из-за сложного формата представления вещественных чисел с плавающей точкой производительность ЭВМ при обработке данных, содержащих вещественные числа, существенно ниже, чем при обработке данных, содержащих только целочисленные значения. Производительность – это одна основных оценок качества вычислительной машины, определяемая аналитическим или экспериментальным путем. Она отражает количество обобщенных операций (команд процессора), выполняемых ЭВМ в единицу времени. Производительность процессоров современных ЭВМ обычно измеряется в миллионах целочисленных операций в секунду (MIPS) или в миллионах операций с плавающей точкой в секунду (MFLOPS, мегафлопс). Так, например, производительность 32-разрядного микропроцессора Intel Celeron с тактовой частотой 700 МГц, предназначенного для массовых моделей IBM-совместимых ПЭВМ, составляет примерно 315 MIPS и 39 MFLOPS (эти параметры определены с помощью тестовой программы PC-DOCTOR фирмы Watergate Software Inc). Для сравнения, производительность 16-разрядного микропроцессора Intel 8088 с тактовой частотой 4,77 МГц, который использовался в компьютерах IBM PC и PC/XT, составляла всего 0,4 MIPS.