максимальное значение с плавающей запятой

Я только начал глубже изучать двоичное кодирование с плавающей запятой и запутался. В ограничениях 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 значений с плавающей запятой в двоичном формате, показывая двоичную арифметику, стоящую рядом с ним. Например: двоичное представление -> преобразование в десятичное -> десятичное представление.


person toozyfuzzy    schedule 28.06.2016    source источник
comment
Ваше бинарное обсуждение относится к определенному формату для float. C не определяет это использование, хотя оно обычно используется. Существуют и другие форматы float. Переносимый код C не зависит от выбранного формата.   -  person chux - Reinstate Monica    schedule 28.06.2016