101,1101 1,011101 × 22
Интересное следствие этого правила: слева от двоичного разделителя в нормализованном двоичном числе с плавающей точкой может стоять только 1.
У большинства современных компьютеров и программ, использующих числа с плавающей точкой, применяется стандарт, введенный в 1985 году Институтом инженеров электротехники и электроники (Institute of Electrical and Electronics Engineers, IEEE) и признанный Американским национальным институтом стандартов (American National Standards Institute, ANSI), — ANSI/IEEE Std 754–1985, стандарт IEEE для двоичной арифметики с плавающей точкой . В кратком описании этого стандарта, занимающем всего 18 страниц, хорошо изложены основы кодирования двоичных чисел с плавающей точкой.
Стандарт IEEE предусматривает два основных формата: число одинарной точности , занимающее в памяти четыре байта, и число двойной точности , занимающее восемь байт.
Сначала рассмотрим число одинарной точности. Оно состоит из трех частей: один бит отводится для знака (0 используется для положительного числа, а 1 — для отрицательного), восемь бит — для порядка, а 23 бита — для дробной значащей части числа, в которой самый младший бит — крайний справа.
1 знаковый бит ( s )
8 битов порядка ( e )
23 бита дробной значащей части ( f )
Итого 32 бита, или четыре байта. Поскольку в значащей части нормализованного двоичного числа с плавающей точкой слева от двоичного разделителя всегда стоит 1, соответствующий ей бит не включается при сохранении числа в формате IEEE. Сохраняется только 23-битная дробная часть . Несмотря на то что для хранения значащей части числа используется только 23 бита, считается, что точность равна 24 битам. Чуть позже мы разберемся в том, что это значит.
Значение 8-битного порядка находится в диапазоне от 0 до 255. Такой порядок называется смещенным . Для нахождения истинного значения порядка с учетом знака необходимо вычесть из него число, называемое смещением . Для чисел одинарной точности с плавающей точкой смещение порядка равно 127.
Значения порядка 0 и 255 используются в особых случаях, о которых расскажу чуть позже. Если значение порядка принадлежит диапазону от 1 до 254, то число, представленное конкретными значениями s (бит знака), e (порядок) и f (дробная часть), равно:
(–1)s × 1, f × 2е − 127.
Выражение (–1)s используется для определения знака числа. Если s равно 0, то число положительное (поскольку любое число в степени 0 равно 1), если s равно 1, то число отрицательное (поскольку –1 в степени 1 равно –1).
Следующая часть выражения 1, f представляет 1, за которой следует двоичный разделитель и 23-битная дробная значащая часть. Все это умножается на 2, возведенное в степень, значением которой является разность хранящегося в памяти 8-битного смещенного порядка и числа 127.
Я не упомянул о способе выражения такого распространенного числа, как 0. Похоже, о нем мы и забыли. Для этого предусмотрено несколько особых случаев:
если e равно 0, f равно 0, то число равно 0; как правило, для представления числа 0 во все 32 бита записываются нули, однако бит знака может быть равен 1, и в этом случае число интерпретируется как отрицательный ноль ; бит может обозначать очень маленькое отрицательное число, для представления которого с одинарной точностью доступных цифр и порядков недостаточно;
если e равно 0, а f не равно 0, то число является действительным, но не нормализованным:
(–1)s × 0, f × 2–127;
обратите внимание на 0 слева от двоичного разделителя значащей части;
если e равно 255, а f равно 0, то число символизирует положительную или отрицательную бесконечность — в зависимости от знака s ;
если e равно 255, а f не равно 0, то значение считается «не числом» и обозначается аббревиатурой NaN (Not a Number — «не число»); NaN может указывать на неизвестное число или на результат недопустимой математической операции.
Наименьшее нормализованное положительное или отрицательное двоичное число, которое можно представить с одинарной точностью в формате с плавающей точкой, следующее:
1,00000000000000000000000ДВА × 2–126.
В этом числе после двоичного разделителя следуют 23 двоичных нуля. Наибольшее нормализованное положительное или отрицательное двоичное число, которое можно представить с одинарной точностью в формате с плавающей точкой, следующее:
1,11111111111111111111111ДВА × 2127.
В десятичной системе счисления эти два числа приблизительно равны 1,175494351 × 10–38 и 3,402823466 × 1038. Именно этими числами ограничивается диапазон чисел с плавающей точкой одинарной точности.
Читать дальше
Конец ознакомительного отрывка
Купить книгу