Двоичное целое десятичное число - Binary integer decimal

Стандарт IEEE 754-2008 включает форматы десятичных чисел с плавающей запятой, в которых значение и показатель степени (и полезные данные NaN ) могут быть закодированы двумя способами, называемыми двоичным кодированием и десятичным кодированием .

Оба формата разбивают число на знаковый бит s , показатель степени q (между q min и q max ) и p -значное значение c (между 0 и 10 p -1). Закодированное значение равно (-1) s × 10 q × c . В обоих форматах диапазон возможных значений идентичен, но они различаются способом представления мантиссы c . В десятичном кодировании он кодируется как последовательность из p десятичных цифр (с использованием плотно упакованного десятичного кодирования (DPD)). Это делает преобразование в десятичную форму эффективным, но требует для обработки специального десятичного ALU . В кодировке двоичного целого десятичного числа ( BID ) он кодируется как двоичное число.

Формат

Используя тот факт, что 2 10 = 1024 лишь немного больше, чем 10 3 = 1000, 3 n- значных десятичных числа могут быть эффективно упакованы в 10 n двоичных разрядов. Однако форматы IEEE имеют значения из 3 n +1 цифр, для представления которых обычно требуется 10 n +4 двоичных разряда.

Это было бы неэффективно, потому что необходимы только 10 из 16 возможных значений дополнительных 4 бит. Более эффективное кодирование может быть разработано с использованием того факта, что диапазон экспоненты имеет форму 3 × 2 k , поэтому показатель степени никогда не начинается с 11. Используя кодировку Decimal32 (с мантиссой из 3 * 2 + 1 десятичных цифр) в качестве примера ( eобозначает экспоненту, mмантиссу, то есть мантиссу):

  • Если мантисса начинается с 0mmm, опускание ведущего 0-го бита позволяет мантиссе уместиться в 23 бита:
s 00eeeeee   (0)mmm mmmmmmmmmm mmmmmmmmmm
s 01eeeeee   (0)mmm mmmmmmmmmm mmmmmmmmmm
s 10eeeeee   (0)mmm mmmmmmmmmm mmmmmmmmmm
  • Если мантисса начинается с 100m, то при пропуске первых 100 битов мантисса умещается в 21 бит. Показатель сдвинут на 2 бита, и 11пара битов показывает, что используется эта форма:
s 1100eeeeee (100)m mmmmmmmmmm mmmmmmmmmm
s 1101eeeeee (100)m mmmmmmmmmm mmmmmmmmmm
s 1110eeeeee (100)m mmmmmmmmmm mmmmmmmmmm
  • Бесконечность, тихий NaN и сигнальный NaN используют кодировки, начинающиеся с s 1111:
s 11110 xxxxxxxxxxxxxxxxxxxxxxxxxx
s 111110 xxxxxxxxxxxxxxxxxxxxxxxxx
s 111111 xxxxxxxxxxxxxxxxxxxxxxxxx

Биты, показанные в круглых скобках, неявны : они не включены в 32 бита кодировки Decimal32, но подразумеваются двумя битами после знакового бита.

Кодировки Decimal64 и Decimal128 имеют большие поля экспоненты и значения, но работают аналогичным образом.

Для кодирования Decimal128 113 бит значимости на самом деле достаточно для кодирования 34 десятичных цифр, а вторая форма на самом деле никогда не требуется.

Когорта

Десятичное число с плавающей запятой может быть закодировано несколькими способами, разные способы представляют разную точность, например, 100.0 кодируется как 1000 × 10 -1 , а 100.00 кодируется как 10000 × 10 -2 . Набор возможных кодировок одного и того же числового значения в стандарте называется когортой . Если результат вычисления неточен, наибольший объем значимых данных сохраняется путем выбора члена когорты с наибольшим целым числом, которое может быть сохранено в мантиссе вместе с требуемой экспонентой.

Диапазон

Предлагаемый стандарт IEEE 754r ограничивает диапазон чисел мантиссой формы 10 n -1, где n - количество целых десятичных цифр, которые могут быть сохранены в доступных битах, чтобы десятичное округление выполнялось правильно.

32 бит 64 бит 128 бит
Биты для хранения 32 64 128
Конечные значащие биты 20 50 110
Значимые биты 23/24 53/54 113
Значащие цифры 7 16 34
Комбинированные биты 11 13 17
Биты экспоненты 8 10 14
Предвзятость 101 398 6176
Стандартный emax 96 384 6144
Стандартный emin −95 −383 −6143

Представление

Двоичное кодирование по своей природе менее эффективно для преобразований в данные с десятичной кодировкой или из них, таких как строки ( ASCII , Unicode и т. Д.) И BCD . Поэтому двоичное кодирование лучше всего выбирать только тогда, когда данные являются двоичными, а не десятичными. IBM опубликовала непроверенные данные о производительности.

Смотрите также

использованная литература

дальнейшее чтение