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

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

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

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

в общем, это было бы 1.1011100001100 * 2³.

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

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

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

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

Благодарю.

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 битов, то смещение составляет 2n-1-1. Это применяется для простой точности (8b/ смещение 27-1 = 127), двойной (11b / 210-1 = 1023 смещение (а не 1032, имеется небольшая опечатка)) и т. Д.
Для поля показателя в 3 бита это дает смещение 22-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

Другие вопросы по тегам