При создании нестандартного формата с плавающей запятой количество битов, выделяемых для экспоненты или мантиссы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