Каково внутреннее представление inf и NaN?

StackOverflow https://stackoverflow.com/questions/640109

  •  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.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top