Кодирование действительных чисел

Кодирование действительных чисел

Мантисса и порядок

Действительные (вещественные) числа обычно представляются в виде чисел с плавающей запятой. Числа с плавающей запятой — один из возможных способов представления действительных чисел, который является компромиссом между точностью и диапазоном принимаемых значений, его можно считать аналогом экспоненциальной записи чисел, но только в памяти компьютера.

При изображении действительных чисел во многих языках программирования вместо запятой принято ставить точку. Так, например, число 5 — целое, а числа 5.1 и 5.0 — действительные. Для удобства отображения чисел, принимающих значения из достаточно широкого диапазона (то есть, как очень маленьких, так и очень больших), используется форма записи чисел с порядком основания системы счисления. Например, десятичное число 1.75 можно в этой форме представить так:

1.75×10° = 0.175×101 = 0.0175×102 = ...,

или так:

17.5×10–1 = 175.0×10–2 = 1750.0×10–3 = ....

В языках программирования этой записи обычно соответствует запись 1.75E0 = 0.175E1 = 0.0175E2 или 17.5E–1 = 175.0E–2 = 1750.0E–3 = ....

Любое число N в системе счисления с основанием q можно записать в виде

N = М ×qp, (1)

где M называется мантиссой числа, а p — порядком. Такой способ записи чисел называется представлением с плавающей точкой (запятой). Если "плавающая" точка расположена в мантиссе перед первой значащей цифрой, то при фиксированном количестве разрядов, отведённых под мантиссу, обеспечивается запись максимального количества значащих цифр числа, то есть максимальная точность представления числа в машине.

Порядок также иногда называют экспонентой или просто показателем степени.

Нормальная и нормализованная форма

Нормальной формой числа с плавающей точкой называется такая форма, в которой мантисса (без учёта знака) в десятичной системе находится на полуинтервале [0; 1). Такая форма записи имеет недостаток: некоторые числа записываются неоднозначно (например, 0,0001 можно записать в 4 формах — 0,0001×100, 0,001×10−1, 0,01×10−2, 0,1×10−3), поэтому распространена также другая форма записи — нормализованная.

В литературе встречаются разные определения нормализованной формы записи. Здесь примем следующее определение:

В нормализованной форме мантисса числа принимает значения от 1/p (включительно) до 1 (не включительно). То есть m – правильная p-ичная дробь, у которой первая цифра после запятой не равна нулю: 1/p <= m < 1.

Примеры нормализованного представления:

3,14 = 0.314 * 101

752.15 = 0.75215•103;

- 0.000039 = - 0.3910-4;

Примеры записи двоичных чисел. Предварительно напомню, что в двоичной системе умножение на два в какой-либо степени – это сдвиг разрядов. Если число умножается на 2 в какой-то степени, и если эта степень – целое положительное число, то это будет сдвиг влево на количество разрядов, которое соответствует степени числа два. Как нетрудно догадаться, деление – это сдвиг вправо.

1 = 0.1 * 21 (сдвинули число влево на один разряд)

100 = 0.1 * 23 (сдвинули число влево на три разряда)

11,11010010 = 0.1111010010 * 22 (сдвинули число влево на два разряда)

0,01 = 0.1 * 2-1 (сдвинули число вправо на один разряд)

В нормализованной форме любое число (кроме 0) записывается единственным образом. Ноль же представить таким образом невозможно, поэтому стандарт предусматривает специальную последовательность битов для задания числа 0 (а заодно и некоторых других полезных чисел, таких как -\infty и +\infty). Так как старший двоичный разряд (целая часть) мантиссы вещественного числа в нормализованном виде всегда равен «1», то его можно не записывать, сэкономив таким образом один бит, что и используется в стандарте IEEE 754.

Типы чисел с плавающей точкой (по IEEE 754)

Познакомиться самостоятельно, например, на Викиконспекте

Особые значения чисел с плавающей точкой

Ноль (со знаком)

Как уже было оговорено выше, в нормализованной форме числа с плавающей точкой невозможно представить ноль. Поэтому для его представления зарезервированы специальные значения мантиссы и порядка - число считается нулём, если все его биты, кроме знакового, равны нулю. При этом в зависимости от значения бита знака ноль может быть как положительным, так и отрицательным.

Арифметика нуля со знаком

Арифметика отрицательного нуля аналогична таковой для любого отрицательного числа и понятна интуитивно. Вот несколько примеров:

Кодирование действительных чисел - student2.ru (если Кодирование действительных чисел - student2.ru )

Кодирование действительных чисел - student2.ru

Кодирование действительных чисел - student2.ru

Кодирование действительных чисел - student2.ru

Кодирование действительных чисел - student2.ru

Кодирование действительных чисел - student2.ru

Кодирование действительных чисел - student2.ru

Неопределенность (NaN)

NaN - это аббревиатура от фразы "not a number". NaN является результатом арифметических операций, если во время их выполнения произошла ошибка (примеры см. ниже). В IEEE 754 NaN представлен как число, в котором все двоичные разряды порядка - единицы, а мантисса не нулевая.

Знак
  Порядок Мантисса  
0/1 1, 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 = Кодирование действительных чисел - student2.ru
     
                                   

Любая операция с NaN возвращает NaN. При желании в мантиссу можно записывать информацию, которую программа сможет интерпретировать. Стандартом это не оговорено и мантисса чаще всего игнорируется.

Как можно получить NaN?

Кодирование действительных чисел - student2.ru

Кодирование действительных чисел - student2.ru

Кодирование действительных чисел - student2.ru

Кодирование действительных чисел - student2.ru , где Кодирование действительных чисел - student2.ru

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

По определению NaN ≠ NaN, поэтому, для проверки значения переменной нужно просто сравнить ее с собой.

Бесконечности

В число с плавающей запятой можно записать значение Кодирование действительных чисел - student2.ru или Кодирование действительных чисел - student2.ru . Как и нули со знаком, бесконечности позволяют получить хотя бы близкий к правильному результат вычисления в случае переполнения. Согласно стандарту IEEE 754 число с плавающей запятой считается равным бесконечности, если все двоичные разряды его порядка - единицы, а мантисса равна нулю. Знак бесконечности определяется знаковым битом числа.

Знак
  Порядок Мантисса  
0/1 1, = Кодирование действительных чисел - student2.ru
     
                                   

Получить бесконечность можно при переполнении и при делении ненулевого числа на ноль. Кодирование действительных чисел - student2.ru Кодирование действительных чисел - student2.ru

Кодирование действительных чисел

Мантисса и порядок

Действительные (вещественные) числа обычно представляются в виде чисел с плавающей запятой. Числа с плавающей запятой — один из возможных способов представления действительных чисел, который является компромиссом между точностью и диапазоном принимаемых значений, его можно считать аналогом экспоненциальной записи чисел, но только в памяти компьютера.

При изображении действительных чисел во многих языках программирования вместо запятой принято ставить точку. Так, например, число 5 — целое, а числа 5.1 и 5.0 — действительные. Для удобства отображения чисел, принимающих значения из достаточно широкого диапазона (то есть, как очень маленьких, так и очень больших), используется форма записи чисел с порядком основания системы счисления. Например, десятичное число 1.75 можно в этой форме представить так:

1.75×10° = 0.175×101 = 0.0175×102 = ...,

или так:

17.5×10–1 = 175.0×10–2 = 1750.0×10–3 = ....

В языках программирования этой записи обычно соответствует запись 1.75E0 = 0.175E1 = 0.0175E2 или 17.5E–1 = 175.0E–2 = 1750.0E–3 = ....

Любое число N в системе счисления с основанием q можно записать в виде

N = М ×qp, (1)

где M называется мантиссой числа, а p — порядком. Такой способ записи чисел называется представлением с плавающей точкой (запятой). Если "плавающая" точка расположена в мантиссе перед первой значащей цифрой, то при фиксированном количестве разрядов, отведённых под мантиссу, обеспечивается запись максимального количества значащих цифр числа, то есть максимальная точность представления числа в машине.

Порядок также иногда называют экспонентой или просто показателем степени.

Наши рекомендации