- •Структуры и алгоритмы обработки данных Введение
- •1. Структуры данных
- •1.1 Уровни структур данных
- •1.2 Классификация структур данных
- •1.3. Информация и ее представление в памяти эвм
- •2. Простые структуры данных
- •2.1. Понятие о типах данных
- •2.2. Перечисляемый тип данных
- •2.3. Стандартные типы данных
- •2.3.1. Целочисленные типы
- •2.3.2. Вещественные числа
- •2.3.3. Представление и структуры хранения логической информации
- •2.4. Указатели
- •2.4.1. Назначение и смысл указателей
- •2.4.2 Операции с адресами
- •2.4.3 Указатели на указатели
- •2.5. Алгоритмы обработки простых структур данных
- •3. Линейные статические структуры данных
- •3.1 Массивы
- •3.2. Динамические массивы
- •3.3. Многомерные массивы
- •3.4. Связь массивов с указателями
- •3.5. Строки
- •3.6. Массивы указателей
- •3.7. Интерпретация составных описателей
- •3.8 Алгоритмы обработки статических линейных струткур
- •4. Ссылки
- •5. Интегральные типы данных (структуры, битовые поля, объединения)
- •5.1. Структуры
- •5.2. Битовые поля
- •5.3. Объединения
- •6. Файлы
2.3.2. Вещественные числа
Система вещественных чисел, применяемая в обычных математических (ручных) вычислениях, предполагается бесконечной и непрерывной. Это означает, что не существует никаких ограничений на диапазон используемых чисел и на точность (количество значащих цифр) их представления. Для любого вещественного числа имеется бесконечно много чисел, которые больше и меньше его, а между любыми двумя вещественными числами также находится бесконечно много чисел.
Реализовать такую систему чисел в технических устройствах нельзя. Во всех компьютерах размеры регистров и ячеек памяти фиксированы, что ограничивает систему представимых чисел. Ограничения касаются как диапазона, так и точности представления чисел, т.е. система машинных чисел оказывается конечной и дискретной, образуя подмножество системы вещественных чисел.
Обычно вещественные числа хранятся и используются в ЭВМ в формате с плавающей точкой.
Для вещественных чисел применяется формат с плавающей точкой в вариантах обычной (или одинарной), двойной и расширенной точности (ОТ, ДТ, РТ). Значащие цифры числа находятся в поле мантиссы (или дроби), поле порядка (или экспоненты) показывает фактическое положение точки в разрядах мантиссы, а бит знака S определяет знак числа. Мантисса представлена в прямом коде.
Порядок Е задается в смещенной форме; он равен истинному порядку, увеличенному на значение смещения.
Смещенный порядок называется также характеристикой; ее можно считать целым положительным или беззнаковым числом.
Задание порядка в форме со смещением упрощает операцию сравнения чисел с плавающей точкой, превращая ее в операцию сравнения целых чисел, а выполнение остальных операций практически не усложняется. Так как операции с целыми числами выполняются значительно быстрее операций над числами с плавающей точкой, сравнение чисел с плавающей точкой производится быстрее, что важно в алгоритмах с большим числом сравнений, например в алгоритмах сортировки. Смещенные порядки 000...00 и 111...11 зарезервированы для специальных значений.
Числа с плавающей точкой длиной 32 и 64 бита применяются во многих компьютерах и обычно называются числами с одинарной и двойной точностью. Как правило, порядок имеет фиксированную длину, определяя один и тот же диапазон представимых чисел, а для повышения точности вводятся дополнительные биты мантиссы. При этом схемы арифметико-логических устройств в процессоре усложняются незначительно. Однако при удвоении длины числа предпочтительнее часть бит отвести для расширения порядка. Такой порядок обеспечивает, в частности, получение точного произведения без переполнения и антипереполнения, когда сомножители представлены в формате ОТ. Параметры для трех форматов ВЧ приведены на рисунке. Значение числа с плавающей точкой равно:
Отметим наличие в мантиссе бита F0 единиц. В форматах чисел с плавающей точкой большинства компьютеров бит F0 отсутствует, и мантисса оказывается правильной дробью.
Мантисса обычно представляется в нормализованной форме, т.е. старший бит равен 1. Следовательно за исключением числа нуль мантисса состоит из целой части и дроби в следующем виде :
1.F1F2F3...FN, где Fi равно 0 или 1. Благодаря нормализации достигается однозначное представление чисел и устраняются старшие нули в числах, меньше единицы, что максимизирует количество значащих цифр мантиссы при ее фиксированной длине.
В форматах ОТ и ДТ бит F0 при передачах чисел и хранении их в памяти не используется. Это так называемый скрытый или неявный бит, который в нормализованных числах содержит 1. Следовательно, в этих форматах невозможно представить числа, которые не нормализованы (за исключением нулевого порядка). Кроме того, скрытый бит не позволяет представить в этих форматах нуль и он должен кодироваться как специальное значение. Скрытый бит можно реализовать только при основании, на степень которого умножается мантисса, равным 2.
Числа в формате РТ имеют явный бит F0. Такой формат позволяет несколько повысить скорость выполнения операций и обеспечить некоторые преимущества, благодаря простоте представления чисел, не являющихся нормализованными.
Числа в форматах ОТ и ДТ существуют только в памяти. При загрузке числа в одном из этих форматов в регистр арифметического устройства оно автоматически преобразуется в 80-битный формат РТ. Аналогично данные из регистров можно преобразовать в форматы ОТ и ДТ для сохранения их в памяти. Формат РТ также допускает сохранение в памяти и обычно применяется для промежуточных результатов.
В процессорах Intel принято хранение многобайтных элементов по принципу “младшее – по меньшему адресу”. Логически во всех форматах левый байт является старшим, а правый младшим. В физической памяти первым, т.е. по меньшему адресу, хранится младший байт (этот адрес считается и адресом всего числа), а последним, т.е. по большему адресу, – старший байт. Передача данных всегда начинается с младшего адреса.
Специальные числовые значения
К специальным значениям относятся денормализованные вещественные числа, нули, отрицательные и положительные бесконечности, нечисла, неопределенность и неподдерживаемые форматы. Для представления специальных значений зарезервированы минимальный 00000... 00 и максимальный 111...11 смещенные порядки.
1). Денормализованные вещественные числа. Это числа, которые меньше минимального нормализованного числа для каждого вещественного формата. Такие числа имеют минимальный смещенный порядок и ненулевую мантиссу.
2). Истинный нуль. Значение нуль в вещественных и десятичном форматах является знаковым, а двоичный целый нуль всегда положительный. В вычислениях знак нуля не учитывается, и обычно программист может не заботиться о наличии знакового нуля. Нуль в вещественных форматах кодируется с нулевым смещенным порядком и мантиссой.
3). Бесконечность. Вещественные форматы поддерживают знаковые представления бесконечностей. Эти значения кодируются со смещенным порядком из всех единиц 1111...11 и мантиссой 1.000...00. Знаки бесконечностей учитываются и сравнения возможны.
4). Нечисла. Нечисло является представителем класса специальных значений, существующих только в вещественных форматах. Оно имеет смещенный порядок из всех единиц, любой знак и любую мантиссу за исключением 1.000..00.
Арифметическое устройство формирует специальное нечисло, называемое неопределенностью, реагируя на замаскированный особый случай недействительной операции. Оно имеет отрицательный знак, смещенный порядок 111...111, а мантисса равна 1.1000...00. Неопределенность предусмотрена для вычислительных ситуаций, в которых человек говорит "не знаю", например деление 0 на 0.
5). Неподдерживаемые форматы. Формат РТ имеет много двоичных наборов, которые не попадают ни в один из ранее рассмотренных классов.
Переменные вещественных (или действительных) типов определяются в языках Си/Си++ следующим образом:
float f1; // плавающий (вещественный) тип обычной точности (4 байта)
double d2; // плавающий тип двойной точности (8 байт)
long float LF; // то же, что double
long double Ld; // длинный плавающий двойной точности (10 байт)