То есть формат A для формата B путем округления

Итак, у меня есть два 9-битных представления с плавающей запятой на основе формата IEEE с плавающей запятой.

Формат A: 1 знаковый бит, k=5 экспоненциальных бит, n = 3 дробных бита и смещение 15

Формат B: 1 знаковый бит, k=4 экспонентных бита, n = 4 дробных бита и смещение 7

Я предполагаю преобразовать формат A в формат B и использовать округление до + бесконечности. Пример проблемы, которую они дали:

Формат А

биты: 1 01111 001

значение: -9/8

Формат Б

биты: 1 0111 0010

значение: -9/8

Я полностью понимаю, как преобразовать двоичный файл в десятичную форму, но я полностью потерян на том, как они преобразовали 1 01111 001 в 1 0111 0010.

Любая помощь будет потрясающей. Спасибо!

1 ответ

Биты экспоненты являются основным фокусом при переключении, потому что вам нужно конвертировать, используя разные смещения для каждого формата. Итак, глядя на пример, который вам дали:

ФОРМАТ А имеет смещение 15 и двоичное значение показателя степени 15 (01111), поэтому вы принимаете двоичное значение - смещение, как если бы вы пытались получить значение IEEE; следовательно, давая вам ноль. При вычислении значения IEEE ваше уравнение выглядит так:

2 ^ 0 * 1,001. 1.001 в 1 раз больше вашего значения дробных битов.

Теперь мы конвертируем в FORMAT B.

ФОРМАТ B имеет 4 экспонентных бита. Итак, мы берем показатель степени вашего уравнения, который равен 0, и используем смещение B, чтобы найти, какой должна быть ваша цепочка битов.

значение битовой строки - смещение = показатель степени в уравнении. Это похоже на нахождение показателя степени при нахождении значения IEEE битовой строки.

значение битовой строки = 0 + смещение = 0 + 7, поскольку B смещение равно 7.

Следовательно, нам нужно значение битовой строки 7: 0111.

Объединяя то, что мы имеем до сих пор, мы получаем: 0 (бит знака), 0111 (биты экспоненты), 001 (биты дробной части) == 0 0111 001.

Теперь мы должны получить дробную битовую строку длины 4 для FORMAT B. У нас есть 001, и нам нужно добавить какой-нибудь бит в строку с последней цифрой, чтобы у нас было что-то в форме 001_, где _ представляет добавленный новый бит. Поскольку вы хотите, чтобы точность была как можно ближе к исходному формату, вы устанавливаете его равным 0. НИКОГДА не делайте его равным 1, поскольку это приводит к увеличению дробной битовой строки в 2 раза, что приводит к снижению точности.

Теперь мы объединяем все вместе, чтобы получить: 0 0111 0010, который является окончательным ответом примера.

Поэтому при конвертации между различными форматами вам нужно помнить два простых правила:

  1. Если вы добавляете биты: 3 -> 4 дробных бита, к концу добавляются нули, чтобы сделать битовую строку нужной вам длины.

  2. Если вы "удаляете" биты: 4 -> 3 дробных бита, самый правый (наименее значимый) бит теряется. Таким образом, 0111 -> 011(1), где (1) - "удаленный бит".

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