Преобразование из десятичного в IEEE 8-битное представление с плавающей запятой - PullRequest
0 голосов
/ 04 марта 2020

Мои ответы на проблему ниже отличаются от ключа ответа. Проблема: мы предполагаем, что IEEE решил добавить новое 8-битное представление с его основными характеристиками, совместимыми с 32/64-битными представлениями. Рассмотрим следующие четыре 8-битных числа:

A: 11100101 B: 00111001 C: 00001100 D: 00011101

Десятичные значения, представленные в приведенных выше числах, следующие, в частности заказ: 3.125, -21, 29/32, 3/8. Q1: Какое 8-битное число с плавающей запятой представляет 29/32 (выберите из A, B, C, D)? A1: D Учитывая приведенную выше информацию, выясните следующее: Q2: количество бит, необходимое для экспоненты A2: 3 Q3: количество бит, необходимое для дроби: A3: 4

Я согласен с ответом на Q1, но я получил разные ответы для A2 и A3 (A2: 2 и A3: 5) 29/32 = 29 * 2 ^ -5 => в двоичном коде 11101 * 2 ^ -5. Если мы сместим десятичную точку, чтобы преобразовать ее в двоичную нормализованную форму: 1.1101 * 2 ^ -1. Таким образом, ответ для Q1 должен быть битовым шаблоном, который заканчивается в 1101, следовательно, D. Ответ Q2: Если ответ 3: 001 1101, fra c = 1101, exp = 001 (нормализовано), смещение = 3 => E = exp - смещение; Е = 1 - 3 = -2. Если мы переведем все обратно в двоичную нормализованную форму (1.fra c * 2 ^ E), мы получим: 1.1101 * 2 ^ -2 = 11101 * 2 ^ -6 = 29/64 (не 29/32 как заявлено изначально). Но когда я использую следующее представление 0 00 11101: 2 бита для exp (смещение = 2 ^ 1 - 1 = 1), 5 бит для fra c, результаты совпадают. exp = 00, поэтому используется ненормализованная запись (0.fra c * 2 ^ E, где E = (exp + 1) - смещение): E = 0 + 1-1 = 0 => 0,11101 * 2 ^ 0 = 11101 * 2 ^ -5 = 29/32. Что я делаю неправильно? Спасибо!

1 Ответ

2 голосов
/ 05 марта 2020

−21 должен быть представлен A, 11100101, так как это единственный бит с установленным знаковым битом. С тремя битами для кодирования показателя степени и четырьмя для основного значения и кодирования мы имеем смещение показателя степени, равное 3, поэтому 110 2 = 6 и представляет показатель степени 3, а 0101 в поле значим и 1,0101 2 = 21/16, поэтому представленное значение равно -1 • 2 3 • 21/16 = −10½, что вдвое меньше, чем мы ожидали, –21.

Для B у нас есть 00111001 → 0 011 1001 → +1 • 2 3−3 • 1.1001 2 → +1 • 1 • 25/16 = 1,5625, что также составляет половину что мы и ожидали, 3.125.

Для C имеем 00001100 → 0 000 1100 (что ненормально) → +1 • 2 1−3 • 0.1100 2 → +1 • 2 −2 • 12/16 = 3/16, что снова вдвое меньше, чем мы ожидали, 3/8.

Итак, очевидно, была допущена ошибка в построении проблемы; значения используют показатель степени смещения -4 вместо -3, который следует из шаблона IEEE-754. (Или была сделана эквивалентная ошибка, такая как позиционирование значений и начального бита после радиксной точки, а не перед ней.)

...