четверг, 17 июля 2014 г.

Вещественные числа в формате IEEE-754

Любое вещественное число с плавающей точкой можно представить в формате

(-1)s basee mantiss

где s - знак (0 - положительный, 1 - отрицательный);
       base - основание (система счисления, в которой представляется число, чаще всего 2 или 10);
       e - экспонента (порядок, показатель степени).
       mantiss - мантисса.

Мантисса нормализуется так, чтобы представлять собой число с плавающей точкой для которого выполняется условие: 1 <= m < b.


Для десятичной системы счисления первый разряд мантиссы находится в диапазоне от 1 до 9, для двоичного, соответственно, только 1, поэтому его можно всегда опускать, тем самым увеличивая разрядность мантиссы на 1:

123.45610 = 1.23456 * 102
0.12345610 = 1.23456 * 10-2
11101.012 = 1.110101 * 24 - для мантиссы достаточно 6 бит, т.к. первый всегда равен 1.
0.0011101012 = 1.110101 * 2-3

Представление числа с плавающей точкой в двоичном виде:


Реальная точность мантиссы - n+1 бит. 

Экспонента представляется в смещенном виде. Величина смещения рассчитывается по формуле offset = 2b-1 - 1. Для b = 8 бит (single) offset = 127, для b = 11 бит (double) offset = 1023.

Значения, состоящие из одних нулей (E = 0) и одних единиц (E = 2b-1) зарезервированы для специальных применений.
Максимальная возможная экспонента Emax представима как 2b-1 и равняется offset.
Минимальная возможная экспонента Emin представима как 1 и равняется -(offset - 1).

Emin для 8 бит = -126, для 11 бит = -1022, Emax для 8 бит = 127, для 11 бит = 1023.

Специальные случаи:

E = 0 (одни нули), M = 0 (одни нули), S = 0: положительный 0 (+0).
E = 0 (одни нули), M = 0 (одни нули), S = 1: отрицательный 0 (-0).

E = 0 (одни нули), M = любое значение (кроме одних нулей, чтобы не путать с положительным и отрицательным нулями), S = любое значение: денормализованные числа.

E = 2b-1 (одни единицы), M = 0 (одни нули), S = 0 представляет собой
E = 2b-1 (одни единицы), M = 0 (одни нули), S = 1 представляет собой -∞

E = 2b-1 (одни единицы), M = 1xx...xxx (первый знак - 1), S - любое: quiet NaN (qNaN)
E = 2b-1 (одни единицы), M = 0xx...xxx (первый знак - 0, остальные - хотя бы одна единица, чтобы не совпало с ), S - любое: signalling NaN (sNaN)


Комментариев нет :

Отправить комментарий