Я только начал глубже изучать двоичное кодирование с плавающей запятой и запутался. В ограничениях C определено максимальное значение для float:
FLT_MAX = 3,402823e+38
Чего я не понимаю, так это если у нас есть:
FLT_MAX_EXP = 128
Это означает, что для нормализованных двоичных чисел у нас будет неявный бит, равный 2^128, если мы попытаемся получить FLT_MAX. Таким образом, FLT_MAX в двоичном виде должен выглядеть так:
Знак: 0 Показатель степени: 11111111 Мантисса: 0000000000000000000000000
Это означает, что у нас есть 23 неиспользуемых бита, и у нас уже есть максимальное число. Но если бы мы использовали эти биты, мы могли бы получить число примерно в 2 раза больше, чем определено FLT_MAX.
Не могли бы вы разъяснить мне этот момент?
Также мне нужно объяснение того, как именно присутствует отрицательная экспонента. Если в моем случае мы используем для этого 8 бит вообще без бита знака. Я понимаю, что мы можем представить знак в дополнении 1 или 2 как старший бит. Но мы используем смещенную экспоненту, и у нас есть все биты для величины экспоненты. Если это так, то как разные двоичные отрицательные и положительные показатели. Как именно мы определяем знак смещенной экспоненты?
Я был бы очень признателен, если бы кто-нибудь объяснил расчеты максимальных и минимальных двоичных 32 значений с плавающей запятой в двоичном формате, показывая двоичную арифметику, стоящую рядом с ним. Например: двоичное представление -> преобразование в десятичное -> десятичное представление.
float
. C не определяет это использование, хотя оно обычно используется. Существуют и другие форматыfloat
. Переносимый код C не зависит от выбранного формата. - person chux - Reinstate Monica   schedule 28.06.2016