decimal32 формат с плавающей запятой - decimal32 floating-point format

В вычислений , decimal32 является десятичной с плавающей точкой компьютерный формат нумерации , который занимает 4 байта (32 бита) в памяти компьютера. Он предназначен для приложений, в которых необходимо точно имитировать десятичное округление, например для финансовых и налоговых вычислений. Как и формат binary16 , он предназначен для хранения с экономией памяти.

Decimal32 поддерживает 7 десятичных цифр от мантиссы и в экспоненту диапазон -95 до +96, т.е. ± 0,000 000 × 10 -95^ до ± 9,999 999 × 10 96^ . (Эквивалентно от ± 0 000 001 × 10 −101^ до ± 9 999 999 × 10 90.^ ) Поскольку значащая величина не нормализована (нет неявной ведущей "1"), большинство значений с менее чем 7 значащими цифрами имеют несколько возможных представлений. ; 1 × 10 2 = 0,1 × 10 3 = 0,01 × 10 4 и т. Д. Ноль имеет 192 возможных представления (384, если включены оба нуля со знаком ).

Decimal32 с плавающей точкой является относительно новым форматом с плавающей запятой, официально введен в версии 2008 по стандарту IEEE 754 , а также с ISO / IEC / IEEE 60559: 2011 .

Представление значений decimal32

Общая кодировка
Подписать Комбинация Поле конечной значащей
1 бит 11 бит 20 бит
s ggggggggggg tttttttttttttttttttt

IEEE 754 допускает два альтернативных метода представления значений decimal32. Стандарт не определяет, как обозначать, какое представление используется, например, в ситуации, когда значения decimal32 передаются между системами.

В одном способе представления, основанном на двоичном целочисленном десятичном (BID), значимость представлена ​​как двоично-закодированное положительное целое число.

Другой, альтернативный, метод представления основан на использовании плотно упакованной десятичной дроби (DPD) для большей части значащей (кроме самой старшей цифры).

Обе альтернативы обеспечивают точно такой же диапазон представимых чисел: 7 значащих цифр и 3 × 2 6 = 192 возможных значений показателя степени.

В обоих кодировках, BID и DPD, 2 старших бита экспоненты и 4 старших бита мантиссы объединяются в 5 битов. Положение 5 битов в поле комбинации меняется, но в остальном кодирование идентично. 5 битов достаточно вместо 6, потому что 2 старших бита экспоненты кодируют только значения от 0 до 2 (3 возможных значения), а 4 старших разряда мантиссы представляют собой десятичную цифру от 0 до 9 (10 возможных значений). Всего у нас есть 3 * 10 = 30 возможных значений при объединении в одну кодировку, которая может быть представлена ​​в 5 битах (2 ^ 5 = 32).

BID-кодирование комбинированного поля
Комбинированное поле СЗБ из Младшие биты
экспоненты
Описание
g10 g9 g8 g7 g6 g5 g4 g3 g2 g1 g0 Экспонента Значительный
0 0 d е ж грамм час я а б c 00 0 abc Defghi Конечное число
полное двоичное значение = 0 abc tttttttttttttttttttt
0 1 01
1 0 10
1 1 0 0 d е ж грамм час я c 00 100 с Конечное число,
полное двоичное значение = 100 c tttttttttttttttttttt
1 1 0 1 01
1 1 1 0 10
1 1 1 1 0 ± бесконечность
1 1 1 1 1 NaN (с полезной нагрузкой в ​​Significand)
DPD-кодирование комбинированного поля
Комбинированное поле СЗБ из Младшие биты
экспоненты
Ведущая
десятичная цифра Сигнификанда
Описание
g10 g9 g8 g7 g6 g5 g4 g3 g2 g1 g0 Экспонента Значительный
0 0 а б c d е ж грамм час я 00 0 abc Defghi 4 * а + 2 * б + с Конечное число с
0 1 01
1 0 10
1 1 0 0 c 00 100 с 8 + с Конечное число с
1 1 0 1 01
1 1 1 0 10
1 1 1 1 0 ± бесконечность
1 1 1 1 1 NaN (с полезной нагрузкой в ​​Significand)

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

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

Для ± Бесконечность, кроме знакового бита, все оставшиеся биты игнорируются (т. Е. Поля экспоненты и мантиссы не действуют). Для NaN бит знака не имеет значения в стандарте и игнорируется. Следовательно, NaN со знаком и без знака эквивалентны, хотя некоторые программы показывают NaN как подписанные. Бит g5 определяет, является ли NaN тихим (0) или сигнальным (1). Биты мантиссы являются полезной нагрузкой NaN и могут содержать данные, определенные пользователем (например, для определения того, как были сгенерированы NaN). Как и для обычных значений, полезная нагрузка NaN может быть либо в кодировке BID, либо в DPD.

Двоичное целочисленное значащее поле

В этом формате используется двоичное значение от 0 до 10 7  - 1 = 9 999 999  = 98967F 16  = 1001 1000100101 1001111111 2 . Кодирование может представлять двоичные значения до 10 × 2 20  - 1 = 10 485 759  = 9FFFFF 16  = 1001 1111111111 1111111111 2 , но значения больше 10 7  - 1 недопустимы (и стандарт требует, чтобы реализации обрабатывали их как 0, если встречается на входе).

Как описано выше, кодирование варьируется в зависимости от того, находятся ли 4 наиболее значимых бита значения в диапазоне от 0 до 7 (от 0000 2 до 0111 2 ) или выше (1000 2 или 1001 2 ).

Если 2 бита после знакового бита равны «00», «01» или «10», то поле экспоненты состоит из 8 бит, следующих за битом знака, а мантисса - это оставшиеся 23 бита с неявным начальным 0. немного:

s 00eeeeee   (0)ttt tttttttttt tttttttttt
s 01eeeeee   (0)ttt tttttttttt tttttttttt
s 10eeeeee   (0)ttt tttttttttt tttttttttt

Сюда входят субнормальные числа, у которых ведущая цифра мантиссы равна 0.

Если 2 бита после знакового бита равны «11», то 8-битное поле экспоненты сдвигается на 2 бита вправо (после как знакового бита, так и «11» битов после этого), и представленное значение находится в оставшейся части. 21 бит. В этом случае имеется неявная (то есть не сохраненная) ведущая 3-битная последовательность "100" в истинном значении.

s 1100eeeeee (100)t tttttttttt tttttttttt
s 1101eeeeee (100)t tttttttttt tttttttttt
s 1110eeeeee (100)t tttttttttt tttttttttt

2-битная последовательность «11» после знакового бита указывает на то, что существует неявный 3-битный префикс «100» к значимой величине. Сравните наличие неявной 1 в значении нормальных значений для двоичных форматов. Биты «00», «01» или «10» являются частью поля экспоненты.

Старшие биты поля мантиссы не кодируют самый старший десятичный разряд; они просто являются частью большего чисто двоичного числа. Например, значение 8 000 000 кодируется как двоичное значение 0111 1010000100 1000000000 , при этом ведущие 4 бита кодируют 7; первая мантисса, требующая 24-го бита, равна 2 23  = 8 388 608

В приведенных выше случаях представлено значение

(−1) знак  × 10 показатель степени − 101  × значение

Если четыре бита после знакового бита равны «1111», тогда значение равно бесконечности или NaN, как описано выше:

s 11110 xx...x    ±infinity
s 11111 0x...x    a quiet NaN
s 11111 1x...x    a signalling NaN

Плотно упакованное десятичное значащее поле

В этой версии мантисса хранится как последовательность десятичных цифр. Первая цифра находится между 0 и 9 (3 или 4 двоичных бита), а остальная часть мантиссы использует плотно упакованное десятичное (DPD) кодирование.

Первые 2 бита экспоненты и первая цифра (3 или 4 бита) мантиссы объединяются в пять битов, следующих за битом знака.

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

Последние 20 битов являются полем продолжения значения, состоящим из двух 10-битных деклетов . Каждый деклет кодирует три десятичных цифры с использованием кодировки DPD.

Если первые два бита после знакового бита - «00», «01» или «10», то это ведущие биты экспоненты, а три бита после них интерпретируются как ведущая десятичная цифра (от 0 до 7 ):

s 00 TTT (00)eeeeee (0TTT)[tttttttttt][tttttttttt]
s 01 TTT (01)eeeeee (0TTT)[tttttttttt][tttttttttt]
s 10 TTT (10)eeeeee (0TTT)[tttttttttt][tttttttttt]

Если первые два бита после знакового бита равны «11», то вторые два бита являются ведущими битами экспоненты, а последний бит имеет префикс «100» для формирования ведущей десятичной цифры (8 или 9):

s 1100 T (00)eeeeee (100T)[tttttttttt][tttttttttt]
s 1101 T (01)eeeeee (100T)[tttttttttt][tttttttttt]
s 1110 T (10)eeeeee (100T)[tttttttttt][tttttttttt]

Оставшиеся две комбинации (11110 и 11111) 5-битового поля используются для представления ± бесконечность и NaN соответственно.

Транскодирование DPD / 3BCD для деклетов представлено в следующей таблице. b9 ... b0 - это биты DPD, а d2 ... d0 - три цифры BCD.

Плотно упакованные правила десятичного кодирования
Кодированное значение DPD Десятичные цифры
Кодовое пространство (1024 состояния) b9 b8 b7 b6 b5 b4 b3 Би 2 b1 b0 d2 d1 d0 Закодированные значения Описание Вхождения (1000 состояний)
50,0% (512 штатов) а б c d е ж 0 грамм час я 0 abc 0 def 0 гхи (0–7) (0–7) (0–7) Три маленькие цифры 51,2% (512 штатов)
37,5% (384 государства) а б c d е ж 1 0 0 я 0 abc 0 def 100 я (0–7) (0–7) (8–9) Две маленькие цифры,
одна большая
38,4% (384 государства)
а б c грамм час ж 1 0 1 я 0 abc 100 f 0 гхи (0–7) (8–9) (0–7)
грамм час c d е ж 1 1 0 я 100 с 0 def 0 гхи (8–9) (0–7) (0–7)
9,375% (96 штатов) грамм час c 0 0 ж 1 1 1 я 100 с 100 f 0 гхи (8–9) (8–9) (0–7) Одна маленькая цифра,
две большие
9,6% (96 штатов)
d е c 0 1 ж 1 1 1 я 100 с 0 def 100 я (8–9) (0–7) (8–9)
а б c 1 0 ж 1 1 1 я 0 abc 100 f 100 я (0–7) (8–9) (8–9)
3,125% (32 штата, 8 использовано) Икс Икс c 1 1 ж 1 1 1 я 100 с 100 f 100 я (8–9) (8–9) (8–9) Три большие цифры, биты b9 и b8 являются не забочусь 0,8% (8 штатов)

8 десятичных значений, все цифры которых равны 8 или 9, имеют четыре кодировки каждое. Биты, отмеченные x в приведенной выше таблице, игнорируются при вводе, но всегда будут равны 0 в вычисленных результатах. (8 × 3 = 24 нестандартных кодирования заполняют промежуток между 10 3  = 1000 и 2 10  = 1024.)

В приведенных выше случаях, когда истинное значение представляет собой последовательность декодированных десятичных цифр, представленное значение равно

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