24-битная экспонента с плавающей запятой

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

Если я хочу изменить число с плавающей запятой, используя больше или меньше битов для экспоненты. Например, я мог бы использовать 9 бит для экспоненты и 15 бит для мантиссы. Сколько битов экспоненты было бы наиболее подходящим, если бы я хотел использовать один формат, представляющий 172810 и 19174410?

Для 172810 двоичный представитель. было 11011000000, поэтому мой показатель степени был 138 (10 + 128), поэтому я хотел бы использовать 8 бит для представления показателя степени 138 (10001010)?


person user77708    schedule 28.06.2013    source источник


Ответы (2)


При создании нестандартного формата с плавающей запятой количество битов, выделяемых для экспоненты или мантиссы1, зависит от ваших собственных потребностей. Делайте то, что служит вам. Смещение экспоненты также может быть выбрано для ваших целей. При его составлении нет никаких правил, кроме требований математики и логики.

Два числа, которые вы показываете, 1728 и 191744, требуют десяти явных битов в мантиссе (девять сохраненных), поскольку 191744 начинается с битов 10111010112. Показатели (учитывая мантиссу, нормализованную до [1, 2)) будут равны 10 и 17, поэтому вам нужно иметь возможность кодировать восемь значений в поле показателя. Однако, если вы хотите зарезервировать одну кодировку экспоненты для бесконечности/NaN, вам потребуется девять значений. Итак, вашему показателю нужно четыре бита. (Например, вы можете использовать четыре бита со смещением 10, что было бы необычно, но не невозможно, так что 00002 представляет показатель степени 10, а 01112 представляет показатель степени 17. Это сделало бы 1728 субнормальным числом.) Таким образом, для представления 1728 и 191744 требуется один бит знака, четыре бита экспоненты и девять битов мантиссы. Остается десять битов, которые вы можете распределить по своему усмотрению.

Пользовательский формат с плавающей запятой обычно полезен только для хранения и только тогда, когда использование памяти критично. На любом оборудовании с поддержкой операций с плавающей запятой собственный формат с плавающей запятой будет намного быстрее, чем программные реализации пользовательского формата. Поэтому обычно предпочтительнее преобразовать пользовательский формат в аппаратно поддерживаемый формат при чтении из хранилища, чтобы выполнять все вычисления (включая временное сохранение промежуточных значений в памяти) с аппаратным форматом и конвертировать обратно в пользовательский формат непосредственно перед к длительному хранению.


1 Предпочтительным термином является мантисса, а не мантисса. Мантиссы являются логарифмическими (дробная часть логарифма), тогда как мантиссы линейны (дробная часть числа с плавающей запятой).

person Eric Postpischil    schedule 28.06.2013

Вы применяете циклическую логику. Экспонента 10 хранится как 10+128, ПОТОМУ ЧТО 128 = 2^7, половина диапазона вашего 8-битного поля экспоненты. Если бы вы использовали 5-битное поле экспоненты, вы могли бы хранить экспоненты от -16 до +16, а экспонента 10 была бы сохранена как 11010 (26).

person MSalters    schedule 28.06.2013