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

У меня небольшой вопрос по IEEE-754 с половинной точностью.

1) У меня есть следующее упражнение: 13,7625 должно быть записано в 16 бит (половинная точность)

поэтому я начал преобразовывать число из DEC в двоичное, и у меня получилось 13,7625 = 1101.1100001100 2

в целом это будет 1.1011100001100 * 2³.

  • бит знака равен 0, потому что число положительное.
  • Мантисса должна иметь десять битов = 101 110 0001.
  • У экспоненты пять битов = смещение (15) + 3 = 18, таким образом, показатель степени равен 10010, и вот чертова проблема.

Мой профессор дал нам решение, и, насколько я знаю, я правильно выполнил мантиссу и двоичное преобразование, но для экспоненты он заявляет, что это 19 = 10011, но я этого не понимаю. может баи 16? согласно Википедии его - 15 за половинную точность. - 127 для одинарной точности. - 1032 для двойной точности.

Можете ли вы указать, что я сделал не так?

2) еще один вопрос, каким было бы смещение экспоненты, если бы у нас была следующая ситуация: 1 бит знака + 4 бита мантиссы + 3 бита экспоненты. и почему?

Благодарю.


person StudentAccount4    schedule 29.06.2019    source источник


Ответы (1)


1) У меня есть следующее упражнение: 13,7625 должно быть записано в 16 бит (половинная точность)

поэтому я начал преобразовывать число из DEC в двоичное, и у меня получилось 13,7625 = 1101.11000011002

Ваше преобразование в мантиссу правильное, и ваш показатель тоже. Смещение экспоненты для половинной точности составляет 15 https://en.wikipedia.org/wiki/Half-precision_floating-point_format

Еще один вопрос, каким будет смещение экспоненты, если у нас будет следующая ситуация: 1 бит знака + 4 бита мантиссы + 3 бита экспоненты. и почему?

Правила кодирования IEEE-754 FP заключаются в том, что если экспонента кодируется n битами, смещение составляет 2 n-1 -1. Это применяется для простой точности (8b / bias 2 7 -1 = 127), двойной (11b / 2 10 -1 = 1023 bias (а не 1032, есть небольшая опечатка)) и т. д.
Для поля экспоненты из 3 бит это дает смещение 2 2 -1 = 3

Для вашей проблемы с кодированием это даст код экспоненты 3 + 3 = 6 = 110. Для мантиссы это зависит от политики округления. если мантисса округляется до 0, мы можем закодировать 1.1011 (100001100), просто отбросив конечные биты, и окончательный код будет
0.110.1011.

Но ошибка округления немного превосходит 0,5 ULP (точно 0,1000011 ULP), и для ее минимизации 1,10111000011 следует округлить на 4 бита, добавив 1 к ULP.

  1.1011 
+      1
= 1.1100

и окончательный код будет 0.110.1100

person Alain Merigot    schedule 29.06.2019
comment
спасибо за ответ, но второй вопрос не имеет ничего общего с первым. Мне не нужно ничего округлять, потому что профессор не просил нас складывать / округлять ответ до 8 бит. Может быть, профессор ошибся и сказал нам, что реальный ответ для экспоненты 19 = 10011? Спасибо за объяснение. это написано в онлайн-лекции в формате pdf, так что я думаю, она ошиблась. про 19 вещь !!. - person StudentAccount4; 29.06.2019
comment
не могли бы вы объяснить мне результат этого упражнения: профессор дала нам это упражнение 4,625=100.101=1.00101*2², а затем написала exponent=110 , пожалуйста, объясните мне, что делает этот профессор? я начал думать, что она просто пишет число в избытке, не прибавляя и не вычитая (при необходимости) смещения. - person StudentAccount4; 30.06.2019
comment
Я тоже считаю, что ты прав. В 8-битном minifloat показатель степени должен быть 3 + 2 = 5, а не 6. Но, вероятно, это просто небрежная ошибка. Спросите ее прямо. - person Alain Merigot; 30.06.2019