десятичный128 формат с плавающей запятой - decimal128 floating-point format

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

Decimal128 поддерживает 34 десятичных цифр от мантиссы и в экспоненту диапазон -6143 до +6144, то есть ± 0,000 000 000 000 000 000 000 000 000 000 000 × 10 -6143^ до ± 9,999 999 999 999 999 999 999 999 999 999 999 × 10 6144^ . (Эквивалентно, ± 0 000 000 000 000 000 000 000 000 000 000 000 × 10 -6176^ до ± 9 999 999 999 999 999 999 999 999 999 999 999 × 10 6111^ ) . Таким образом, decimal128 имеет наибольший диапазон значений по сравнению с другие базовые форматы с плавающей запятой IEEE. Поскольку значащая величина не нормализована, большинство значений с менее чем 34 значащими цифрами имеют несколько возможных представлений; 1 × 10 2 = 0,1 × 10 3 = 0,01 × 10 4 и т. Д. Ноль имеет 12 288 возможных представлений ( 24 576, если включены оба нуля со знаком ).

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

Представление десятичных128 значений

Знак Комбинация Значимое и продолжение
1 бит 17 бит 110 бит
s мммммммммммммммм cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc

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

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

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

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

В обоих случаях 4 старших разряда мантиссы (которые на самом деле имеют только 10 возможных значений) комбинируются с 2 старшими битами показателя степени (3 возможных значения), чтобы использовать 30 из 32 возможных значений 5 бит в комбинированное поле. Остальные комбинации кодируют бесконечности и NaN .

Комбинированное поле Экспонента Значимость Msbits Другой
00ммммммммммммммм 00xxxxxxxxxxxx 0ccc -
01мммммммммммммм 01xxxxxxxxxxxx 0ccc -
10ммммммммммммммм 10xxxxxxxxxxxx 0ccc -
1100мммммммммммм 00xxxxxxxxxxxx 100c -
1101ммммммммммммм 01xxxxxxxxxxxx 100c -
1110мммммммммммм 10xxxxxxxxxxxx 100c -
11110мммммммммм - - ± бесконечность
11111мммммммммммм - - NaN. Знаковый бит игнорируется. Шестой бит поля комбинации определяет, сигнализирует ли NaN.

В случае Infinity и NaN все остальные биты кодирования игнорируются. Таким образом, можно инициализировать массив бесконечностями или NaN, заполнив его однобайтовым значением.

Поле двоичного целочисленного значения

Этот формат использует двоичный мантиссу от 0 до 10 34  - 1 = 9 999 999 999 999 999 999 999 999 999 999 999  = 1ED09BEAD87C0378D8E63FFFFFFFF 16  = 0111 1011010000 1001101111 1010101101 1000011111 0000000011 0111100011 0110001110 0110001111 1111111111 1111111111 1111111111 2 . Кодирование может представлять двоичные значения до 10 × 2110  - 1 = 12 980 742 146 337 069 071 326 240 823 050 239, но значения, превышающие 10 34  - 1, недопустимы (и стандарт требует, чтобы реализации обрабатывали их как 0, если встречается на входе).

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

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

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

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

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

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

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

Для формата decimal128 все эти значения находятся за пределами допустимого диапазона (они начинаются с 2 113  > 1,038 × 10 34 ) и, таким образом, декодируются как ноль, но шаблон такой же, как decimal32 и decimal64 .

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

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

Если четыре бита после знакового бита равны «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 бита) мантиссы объединяются в пять битов, следующих за битом знака.

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

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

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

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

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

 s 1100 T (00)eeeeeeeeeeee (100T)[tttttttttt][tttttttttt][tttttttttt][tttttttttt][tttttttttt][tttttttttt][tttttttttt][tttttttttt][tttttttttt][tttttttttt][tttttttttt]
 s 1101 T (01)eeeeeeeeeeee (100T)[tttttttttt][tttttttttt][tttttttttt][tttttttttt][tttttttttt][tttttttttt][tttttttttt][tttttttttt][tttttttttt][tttttttttt][tttttttttt]
 s 1110 T (10)eeeeeeeeeeee (100T)[tttttttttt][tttttttttt][tttttttttt][tttttttttt][tttttttttt][tttttttttt][tttttttttt][tttttttttt][tttttttttt][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.)

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

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

Рекомендации