24-разрядное двоичное число с плавающей запятой одинарной точности - PullRequest
0 голосов
/ 31 марта 2019

У меня есть следующий 24-разрядный двоичный файл:

0101 0011 1111 1101 0111 1101

И мне нужно выяснить:

Какая пара чисел с плавающей запятой одинарной точности (действительных) может быть представлена ​​этими 24-разрядными числами?

В примере из учебника говорится, что разбиение 24-разрядных чисел на два 12-разрядных двоичных числанаправление, в котором я должен идти.

В итоге я получу 0101 0011 1111 & 1101 0111 1101

Однако моя проблема в том, что мой учебник дает только действительный пример 16- и 32-битногодвоичные числа.Я не уверен, как определить показатель степени, мантиссу, характеристику.Это все очень ново для меня.

edit: Вот отрывок из учебника, указывающий, чего я должен достичь:

Например, строка из 24 битов:

0011 0110 0011 1001 0011 0101

Преобразован в пару чисел с плавающей запятой одинарной точности (действительных) 0,13672 и -0,0004044.

Любое число с плавающей точкой одинарной точности (от 0,13672 до 0,1406) будет иметь один и тот же 12-битный шаблон в этом не очень точном компьютере.

Для тех, кто нашел этот вопроссбивает с толку: как учебник преобразовал 0011 0110 0011 1001 0011 0101 в 0,13672 и -0,0004044?

1 Ответ

2 голосов
/ 08 апреля 2019

Разделение 24-битного значения на пару 12-битных полей выглядит как правильный подход. Для двух 12-битных полей используемый здесь формат с плавающей запятой, начиная с крайнего левого бита:

  • один знаковый бит (0 для положительного, 1 для отрицательного)

  • пять битов экспоненты, давая значение без знака, которое смещено на 15 (поэтому мы должны вычесть 15 из значения без знака этого поля, чтобы получить фактическую экспоненту)

  • шесть битов значимости и значение без знака

Абсолютное значение числа с плавающей запятой, выраженное в этом формате, будет иметь вид:

significand * ( 2 ^ exponent ) / ( 2 ^ 6 )

Для приведенных примеров имеем:

0011 0110 0011 =>
  sign bit       = 0, positive
  exponent field = 01101, which is decimal 13, so actual exponent = 13 - 15 = -2
  significand    = 100011, which is decimal 35

  value = positive 35 * ( 2 ^ -2 ) / ( 2 ^ 6 ) = 0.13672

1001 0011 0101 =>
  sign bit       = 1, negative
  exponent field = 00100, which is decimal 4, so actual exponent = 4 - 15 = -11
  significand    = 110101, which is decimal 53

  value = negative 53 * ( 2 ^ -11 ) / ( 2 ^ 6 ) = -0.0004044

Вы можете подтвердить комментарий о точности этого формата, повторив эти вычисления со значениями и значениями, которые были увеличены на единицу.

...