Как компьютер сохраняет 0,000000f в соответствии с представлением с плавающей запятой IEEE 754?

#floating-point #precision #cpu-architecture #ieee-754

#с плавающей запятой #точность #архитектура процессора #ieee-754

Вопрос:

Поскольку мы знаем, что мы можем представить любое число с плавающей запятой в представлении с плавающей запятой IEEE 754.Но во всех плавающих числах мы получаем что-то вроде 1. (некоторая мантисса) * 2 ^ (некоторый показатель степени), где 1 всегда фиксируется в первой позиции, и, таким образом, мы предполагаем это при преобразовании любого числа с плавающей запятой IEEE 754 в десятичное число.Но что мы будем предполагать в случае 0.000000f, поскольку в этом случае мы не можем представить число в 1. (некоторая мантисса) * 2 ^ (некоторый показатель степени), поскольку в начале мантиссы никогда не может быть 1, кроме 0.

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

1. en.wikipedia.org/wiki/Single-precision_floating-point_format очень хороший, хорошо написанный и подробный.

Ответ №1:

Как компьютер сохраняет 0,000000f в соответствии с представлением с плавающей запятой IEEE 754?

Когда a float меньше наименьшего нормального ненулевого FLT_MIN значения ( 0 00000001 00000000000000000000000 ), оно сохраняется с закодированным смещенным показателем 0 ( s 00000000 xxxxxxxxxxxxxxxxxxxxxxx ) . Подразумеваемый бит больше не равен 1, а равен 0, а эффективный смещенный показатель равен 1.

Когда xxxxxxxxxxxxxxxxxxxxxxx все нули, значение равно 0,0f или -0,0f.


A float с закодированным смещенным показателем, равным 0, а xxxxxxxxxxxxxxxxxxxxxxx не нулю, является ненормальным.

FLT_TRUE_MIN это 0 00000000 00000000000000000000001 наименьшее положительное ненулевое значение.

Ответ №2:

Шаблон all 0 зарезервирован для 0:

               3  2          1         0
              1 09876543 21098765432109876543210
              S ---E8--- ----------F23----------
      Binary: 0 00000000 00000000000000000000000
         Hex: 0000 0000
   Precision: SP
        Sign: Positive
    Exponent: -127 (Stored: 0, Bias: 127)
   Hex-float: 0x0p 0
       Value:  0.0
  

Обратите внимание, что в представлении IEEE есть два 0: 0 и -0; которые можно различить. Для последнего используется шаблон 0x80000000:

               3  2          1         0
              1 09876543 21098765432109876543210
              S ---E8--- ----------F23----------
      Binary: 1 00000000 00000000000000000000000
         Hex: 8000 0000
   Precision: SP
        Sign: Negative
    Exponent: -127 (Stored: 0, Bias: 127)
   Hex-float: -0x0p 0
       Value: -0.0
  

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

1. Обратите внимание, что смещенный показатель степени = 0 подразумевает начальный 0 бит для мантиссы; как указывают Снефтел и чукс, -0.0 это частный случай субнормального (он же денормального) числа. Не отдельный частный случай, как -Inf против -NaN — это где 0 против ненулевой мантиссы означает что-то другое с показателем всех единиц.

Ответ №3:

Как ответил Алиас, «все биты экспоненты и значащих, установленные на ноль», определяются как ноль. Также можно рассматривать ноль как частный случай денормального числа. Когда все биты экспоненты установлены на ноль (наименьший возможный показатель), для мантиссы не принимается начальный 1, поэтому, если значение также равно нулю, то результирующее значение (интерпретируемое как денормальное число) равно нулю.