Каково внутреннее представление inf и NaN?
-
11-07-2019 - |
Вопрос
Сегодня во время обеда мы с подругой обсуждали, как хранятся Inf и Nan'ы.
Возьмем, к примеру, Fortran 90.4-байтовые значения reals могут принимать значение Inf или NaN.Как это хранится внутри компании?Предположительно, 4-байтовое вещественное число - это число, представленное внутренне 32-значным двоичным числом.Хранятся ли Inf и NaN в виде 33-битных двоичных чисел?
Решение
В частности, из соуса Песто. Ссылка:
Стандартное представление с плавающей запятой одинарной точности IEEE требует 32-разрядного слова, которое может быть представлено как пронумерованное от 0 до 31 слева направо.Первый бит - это знаковый бит, S
, следующие восемь битов являются битами экспоненты, 'E
', и последние 23 бита - это дробь 'F
':
S EEEEEEEE FFFFFFFFFFFFFFFFFFFFFFF 0 1 8 9 31
Значение V
представленное словом может быть определено следующим образом:
- Если
E=255
иF
отличен от нуля, тогдаV=NaN
("Не число") - Если
E=255
иF
равен нулю иS
является1
, тогдаV=-Infinity
- Если
E=255
иF
равен нулю иS
является0
, тогдаV=Infinity
- Если
0<E<255
тогдаV=(-1)**S * 2 ** (E-127) * (1.F)
где "1.F
" предназначен для представления двоичного числа, созданного с помощью префикса F с неявной начальной точкой 1 и двоичной точкой . - Если
E=0
иF
отличен от нуля, тогдаV=(-1)**S * 2 ** (-126) * (0.F)
Это "ненормализованные" значения. - Если
E=0
иF
равен нулю иS
является1
, тогдаV=-0
- Если
E=0
иF
равен нулю иS
является0
, тогдаV=0
Другие советы
Большинство представлений с плавающей запятой основаны на стандарте IEEE, который имеет установить шаблоны , определенные для Inf и NaN.