Кодирование вещественных чисел
Формат с плавающей точкой использует представление вещественного числа R в виде произведения мантиссы m на основание системы счисления q в некоторой целой степени p, которую называют порядком: R = m * q p.
Представление числа в форме с плавающей точкой неоднозначно. Например, справедливы следующие равенства:
12.345 = 0.0012345 * 104 = 1234.5 * 10-2 = 0.12345 * 102
Чаще всего в ЭВМ используют нормализованное представление числа в форме с плавающей точкой. Мантисса в таком представлении должна удовлетворять условию: 0.1p <= m < 1. Иначе говоря, мантисса должна быть меньше 1 и первая значащая цифра - не ноль (p - основание системы счисления).
В памяти компьютера мантисса представляется как целое число, содержащее только значащие цифры (0 целых и запятая не хранятся), так для числа 12.345 в ячейке памяти, отведенной для хранения мантиссы, будет сохранено число 12345. Для однозначного восстановления исходного числа остается сохранить только его порядок, в данном примере - это 2.
Диапазон и точность представления чисел зависят от числа разрядов, отводимых под порядок и мантиссу. Обычно число в формате с плавающей запятой занимает в памяти 4 (float) или 8 (double) байтов.
В большинстве вычислительных машин для упрощения операций над порядками их приводят к целым положительным числам, применяя так называемый смещенный порядок. Для этого к истинному порядку добавляется целое положительное число, равное половине представимого диапазона порядков.
Числа с плавающей запятой в разных вычислительных машинах (ВМ) имеют различные форматы. В настоящее время для всех ВМ рекомендован стандарт, разработанный международным центром стандартизации IEEE (Institute of Electrical and Electronics Engineers).
Стандарт IEEE 754
Рекомендуемый для всех ВМ формат представления чисел с плавающей запятой определен стандартом IEEE 754. Этот стандарт был разработан с целью облегчить перенос программ с одного процессора на другие и нашел широкое применение практически во всех процессорах и арифметических сопроцессорах.
Рис. 2.24. Основные форматы IEEE 754: а — одинарный; б — двойной
Стандарт определяет 32-битовый (одинарный) и 64-битовый (двойной) форматы (рис. 2.24) с 8- и 11-разрядным порядком соответственно. Самый левый бит хранит знак числа. Основанием системы счисления является 2.
Смещение равно соответственно 127 и 1023.
Максимальный порядок, который может иметь число: 127 и 1023.
Для повышения точности представления мантиссы используют прием скрытой единицы: поскольку в нормализованной мантиссе старшая цифра всегда равна 1, ее можно не хранить. Следовательно, при 4-хбайтовом представлении, мантисса фактически состоит из 24 разрядов. Скрытая единица при выполнении арифметических операций восстанавливается, а при записи результата удаляется.
Пример: рассмотрим 4-хбайтовый код числа 20.5:
20.5 = 10100.12 = 0.101001 * 25
Порядок (смещенный): 5+127 = 132 = 1000 01002
Мантисса: 101001 à 010010…0 (первая единица – скрытая, в конец мантиссы добавляются нули).
4-хбайтовое представление:
порядок мантисса
В 16-ом виде этот код будет выглядеть так: 42240000.
Определим максимальное число и его точность при 4-хбайтовом представлении.
Максимальное число:
.1…1 * 2127 = 1 * 2127 = 1.7 * 1038
Максимальное значение мантиссы:
1…1 (24 единицы) = 224 – 1 = 210*2.4 = 10242.4 = 1.7*107, следовательно точность представления мантиссы 7-8 значащих цифр.