
В 60-х и 70-х гг. не было единопризнанного стандарта представления чисел с плавающей запятой, из-за чего программы того времени не были переносимыми приложениями. Также большой проблемой были «странности» разных компьютеров, которые нужно было знать и учитывать при создании программ.
В 1976 году была появилась инициатива создать единый стандарт для представления чисел с плавающей запятой, что существенно упростило работу с числами.
Вычисления компьютера ограничены его памятью, поэтому дробная часть вещественных чисел не является бесконечной и хранится в памяти с определенной точностью.
Числа в нормализованном виде чаще всего записываются только на экране компьютера, поэтому принято запятую в них заменять на точку.
Принятый способ хранения вещественных (действительных) чисел в памяти компьютера использует нормализованную (экспоненциальную) запись действительных чисел.
Для хранения вещественных чисел (как и для целых) используется двоичная система. Таким образом, число предварительно должно быть переведено двоичный код.
Нормализованная запись числа
Запись в виде
a=±m⋅qnявляется нормализованной записью отличного от нуля действительного числа,
где n -- любое целое число (в том числе и ноль),
m -- правильная дробь в системе счисления с основой q, у которой первая цифра после запятой не равна нулю, то есть $\frac{1}{q}\le m
m называется мантиссой числа, n -- порядком числа, q -- основанием системы счисления.
Приведем числа десятеричной системы к нормализованной записи:
1.3579=0.13579⋅101; 10000=0.1⋅105; 0,123456=0.123456⋅100.Приведем число восьмеричной системы счисления к нормализованной записи:
0,00001198=0.1198⋅8−4 (порядок записан в десятичной системе).
Приведем число двоичной системы счисления к нормализованной записи:
200.0022=0.2000022⋅2−3.Ноль в десятичной системе будет записан в нормализованном виде следующим образом:
Нормализованная экспоненциальная запись (НЭЗ) числа - это запись в виде
a=±m⋅qn,где n -- любое целое число (в том числе и ноль),
m -- правильная дробь в системе счисления с основой q, целая часть которой состоит из одной цифры,
m --мантисса числа, а n -- порядок (или экспонента) числа.
Рассмотрим вышеописанные числа в нормализованной экспоненциальной записи.
НЭЗ десятичных чисел:
1.3579=0.13579⋅101=1.3579⋅100; 10000=0.1⋅105=1.0⋅104; 0.123456=0.123456⋅100=1.23456⋅10−1.НЭЗ восьмеричного числа:
0.00001198=0.1198⋅8−4=1.198⋅8−5.НЭЗ двоичного числа:
200.0022=0.2000022⋅2−3=2.000022⋅2−4.Обратите внимание, что в НЭЗ записи первая цифра после запятой может быть нулём, в отличие от нормализованной записи.
Хранение чисел с плавающей запятой
Для хранения вещественных чисел в памяти компьютера часть разрядов ячейки отводится для записи порядка числа, остальные -- для записи мантиссы. По одному разряду в каждой группе разрядов отводится для знака порядка и знака мантиссы. Чтобы не хранить знак порядка был придуман смещенный порядок.
Если для задания порядка выделено k разрядов, то к истинному порядку (ИП) прибавляют смещение, таким образом, смещённый порядок (СП) рассчитывается по формуле:
Найдем смещённый порядок для истинного порядка, лежащего в диапазоне от −127 до +128.
Возьмем начальное значение ИП= −127:
СП=−127+28−1−1=−127+128−1=0.Возьмем конечное значение ИП = 128:
СП=128+28−1−1=128+128−1=255.Таким образом, ИП, лежащий в диапазоне от −127 до +128, представляется смещённым порядком, значения которого меняются в диапазоне от 0 до 255.
Алгоритм представления вещественного числа:
-
Перевести число в двоичную систему счисления.
-
Привести число к нормализованной записи.
-
Найти смещённый порядок числа.
-
Поместить знак, порядок и мантиссу в соответствующие разряды.
Представим число −25.625 в 4-байтовом представлении (1 бит отводится под знак числа, 8 бит -- под смещённый порядок, остальные биты -- под мантиссу).
Будем действовать по алгоритму:
-
Переведем число −25.625 в двоичный код:
2510=110012
Рисунок 1.
2510=110012 0.62510=0.1012 −25.62510=−11001.1012
Рисунок 2. -
Приведем число к нормализованному виду:
−11001.1012=−1.10011012⋅24 -
Найдем смещенный порядок числа:
СП=127+4=131 -
Поместим знак, порядок и мантиссу в соответствующие разряды:
Рисунок 3.
