Расширенные форматы (Extended precision)

 

Помимо базовых форматов, стандарт IEEE 754 также определяет расширенные (extended) форматы точности. Расширенный формат точности расширяет базовый формат, обеспечивая более высокую точность и более широкий диапазон представляемых чисел. Реализация расширенного формата может использовать любое внутреннее представление, определяемое выбором размеров мантиссы и порядка.

Так в одной из реализаций расширенного формата в сопроцессоре Intel используется 80 -разрядное представление чисел (long double) с размером мантиссы 64 бита и размером порядка 15 бит.

 

Алгоритм получения представления вещественного числа в памяти компьютера (слайд 6)

 

Порядок преобразования вещественного числа для представления его в памяти компьютера покажем на примере числа двойной точности (Double precision).

Значение этого формата занимает в памяти 8 байт (64 бита), при этом первый разряд (старший) отводится под знак всего числа, 11 разрядов – под порядок и 52 разряда – под мантиссу (рис. 6).

 

Знак Смещенный порядок Мантисса
63 62..52 51..0

 

Рис. 6. Представление в памяти компьютера вещественного числа с плавающей запятой

 

Данный формат числа подразумевает наличие бита целой части мантиссы (он всегда равен 1) и двоичной запятой перед старшим (51-м) разрядом мантиссы, значения мантиссы находятся в диапазоне [1; 2). Для упрощения вычислений и сравнения вещественных чисел значение порядка хранится в виде смещенного числа (кода со сдвигом), т.е. к настоящему значению порядка перед записью его в память прибавляется смещение. Смещение выбирается так, чтобы минимальному значению порядка соответствовал нуль. В данном случае порядок занимает 11 разрядов и имеет диапазон от 2-1023 до 21023, поэтому смещение равно 210 – 1 = 102310 = 11111111112.

Таким образом, алгоритм для получения представления вещественного числа в памяти компьютера приобретает следующий вид:

1. Перевести модуль числа в двоичную систему счисления.

2. Нормализовать двоичное число, т.е. записать его в виде M × 2p, где M – мантисса (ее целая часть равна 12) и p – порядок, записанный в десятичной системе счисления;

3. Прибавить к порядку смещение и перевести смещенный порядок в двоичную систему счисления;

4. Дописать слева знак всего числа (0 – положительное; 1 – отрицательное).

 

Пример 1. Запишем код числа -312,3125.

 

1. Двоичная запись модуля этого числа имеет вид: 100111000,0101.

2. Имеем 1 0011 1000,0101 = 1,0011 1000 0101×28.

3. Получаем смещенный порядок 8+1023 = 1031. Далее имеем 103110 = 100 0000 01112.

4. Окончательно получаем:

 

1 100 0000 0111 0011 1000 0101 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
63 62..52 51..0

 

Полученный код более компактно можно записать в шестнадцатеричной системе следующим образом: C073 8500 0000 000016.

Другой пример иллюстрирует обратный переход от кода вещественного числа к самому числу в десятичной системе счисления.

 

Пример 2. Пусть дан код 3FEC 6000 0000 000016 или

 

0 011 1111 1110 1100 0110 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
63 62..52 51..0

 

1. Прежде всего, замечаем, что это код положительного числа, поскольку в самом старшем разряде (с номером 63) записан 0. Порядок этого числа: 011 1111 11102 = 102210; 1022 - 1023 = -1.

2. Число имеет вид 1,1100 011×2-1 или 0,1110 0011.

3. После перевода в десятичную систему счисления получаем: 0,88671875.

 

Диапазон значений и точность представления чисел с плавающей запятой (слайд 7)

 

Диапазон и точность представления чисел, которые можно записать в одном из рассмотренных форматов, зависит от количества разрядов, отведённых для представления мантиссы и показателя. Пара значений показателя (когда все разряды нули и когда все разряды единицы) зарезервирована для обеспечения возможности представления специальных чисел. К ним относятся ноль, значения NaN (Not a Number,
" не число ", получаются как результат операций типа деления нуля на ноль) и ±∞.

 

Таблица 1. Характеристики базовых форматов вещественных чисел с плавающей запятой

Название
в IEEE 754

Название
типа переменной

Диапазон
значений

Размер переменной, бит

Размер мантиссы и порядка, бит

Точность, десятич. разрядов

Visual Basic C++
Single presicion Single float 1,17×10-38.. 3,40×1038 32 23+8 7-8
Double precision Double double 2,22×10-308.. 1,79×10308 64 52+11 15-16

 

В табл. 1 приведены характеристики двух базовых форматов вещественных чисел с плавающей запятой, поддерживаемых во всех универсальных языках программирования, в частности, Visual C++.

Представление специальных чисел для одинарной и двойной точности приведено в табл. 2.

 

Таблица 2. Представление специальных чисел

Число

Одинарная точность

Двойная точность

знак порядок мантисса знак порядок мантисса
+0 0 0016 0 0 00016 0
−0 1 0016 0 1 00016 0
+∞ 0 FF16 0 0 7FF16 0
−∞ 1 FF16 0 1 7FF16 0
SNan {0,1} FF16 любая ≠ 0 старший бит = 0 {0,1} 7FF16 любая ≠ 0 старший бит = 0
QNan {0,1} FF16 любая ≠ 0 старший бит = 1 {0,1} 7FF16 любая ≠ 0 старший бит = 1

 

Здесь QNaN – так называемый “тихий” Nan, SNan – так называемый “сигнальный” Nan. Первый, попав в любую операцию, возвращает NaN, второй – вызывает аварийную ситуацию.

 






Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: