В вычислениях decimal128 является десятичное число с плавающей точкой формат компьютерной нумерации, занимающий 16 байтов (128 бит) в памяти компьютера. Он предназначен для приложений, в которых необходимо точно имитировать десятичное округление, например для финансовых и налоговых вычислений.
Decimal128 поддерживает 34 десятичных цифры из значимости и диапазон экспоненты от -6143 до +6144, то есть ± 0,000000000000000000000000000000000 × 10 ^ до ± 9.999999999999999999999999999999999 × 10 ^. (Эквивалентно от ± 0000000000000000000000000000000000 × 10 ^ до ± 9999999999999999999999999999999999 × 10 ^.) Следовательно, decimal128 имеет наибольший диапазон значений по сравнению с другими базовыми форматами с плавающей запятой IEEE. Поскольку значащая величина не нормализована, большинство значений с менее чем 34 значащими цифрами имеют несколько возможных представлений; 1 × 10 = 0,1 × 10 = 0,01 × 10 и т. Д. Ноль имеет 12288 возможных представлений (24576, если включены оба нулей со знаком ).
Decimal128 с плавающей запятой - это относительно новый десятичный формат с плавающей запятой, официально представленный в версии 2008 стандарта IEEE 754, а также в ISO / IEC. / IEEE 60559: 2011.
Знак | Комбинация | Знаки продолжения |
---|---|---|
1 бит | 17 бит | 110 бит |
s | мммммммммммммммм | cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc |
IEEE 754 допускает два альтернативных метода представления для значений decimal128. Стандарт не определяет, как обозначать, какое представление используется, например, в ситуации, когда десятичные128 значения передаются между системами.
В одном методе представления, основанном на двоичном целочисленном десятичном (BID), мантисса представлена как двоично-закодированное положительное целое число.
Другой, альтернативный, метод представления основан на плотно упакованной десятичной системе (DPD) для большей части значащей (кроме самой старшей цифры).
Обе альтернативы обеспечивают точно такой же диапазон представимых чисел: 34 значащих знака и 3 × 2 = 12288 возможных значений показателя степени.
В обоих случаях 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 - 1 = 99999999999999999999999999999999 = 1ED09BEAD87C0378D8E63FFFFFFFF 16 = 01111011011010000100000011010111111111111111111111111111111111111111111111111111111111111111 Кодирование может представлять двоичные значения до 10 × 2 - 1 = 12980742146337069071326240823050239, но значения больше 10 - 1 недопустимы (и стандарт требует, чтобы реализации обрабатывали их как 0, если они встречаются на входе).
Как описано выше, кодирование варьируется в зависимости от того, находятся ли самые старшие 4 бита мантиссы в диапазоне от 0 до 7 (от 0000 2 до 0111 2), или выше (1000 2 или 1001 2).
Если 2 бита после знакового бита равны "00", "01" или "10", то поле экспоненты состоит из 14 бит, следующих за знаковым битом, а мантисса - это оставшиеся 113 бит., с неявной ведущим 0 бит:
с 00eeeeeeeeeeee (0) ТТТ tttttttttt tttttttttt tttttttttt tttttttttt tttttttttt tttttttttt tttttttttt tttttttttt tttttttttt tttttttttt tttttttttt
с 01eeeeeeeeeeee (0) ТТТ 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 tttttttttt tttttttttt tttttttttt tttttttttt tttttttttt tttttttttt, где это число - это ведущее число <значимое <число, где- это <значимый>, где- это <значимое>число <>, где это значение - <значение>4>Если 2 бита после знакового бита равны «11», то 14-битное поле экспоненты сдвигается на 2 бита вправо (после как знакового бита, так и «11» битов после этого), и представленное значение находится в оставшиеся 111 бит. В этом случае имеется неявная (то есть не сохраненная) ведущая 3-битная последовательность "100" в истинном значении.
с 1100eeeeeeeeeeee (100) т tttttttttt tttttttttt tttttttttt tttttttttt tttttttttt tttttttttt tttttttttt tttttttttt tttttttttt tttttttttt tttttttttt
S 1101eeeeeeeeeeee (100) т 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 tttttttttt tttttttttt tttttttttt
«11» 2-битная последовательность после знакового бита указывает на то, что «11» 2-битная последовательность после знакового бита указывает на то, что там неявно присутствует знаковый бит. Сравните наличие неявной 1 в значении нормальных значений для двоичных форматов. Биты «00», «01» или «10» являются частью поля экспоненты.
Для формата decimal128 все эти значения находятся за пределами допустимого диапазона (они начинаются с 2>1,038 × 10) и, таким образом, декодируются как ноль, но шаблон такой же, как decimal32 и decimal64.
В приведенных выше случаях представляемое значение равно
- (−1) × 10 × значимое
Если четыре бита после знакового бита равны «1111», то значение является бесконечность или NaN, как описано выше:
s 11110 xx... x ± бесконечность s 11111 0x... xa тихий NaN s 11111 1x... xa, сигнализирующий о 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] [tttttttttt ] [tttttttttt]
s 01 TTT (01) eeeeeeeeeeee (0TTT) [tttttttttt] [tttttttttt] [tttttttttt] [tttttttttt] [tttttttttt] [tttttttttt] [tttttttttt] [tttttttttt] [tttttttttt] [tttttttttt] [tttttttttt] [tttttttttt] [tttttttttt] [tttttttttt] [tttttttttt] [tttttttttt] [tttttttttt]
с 10 TTT (10) eeeeeeeeeeee (0TTT) [tttttttttt] [tttttttttt] [tttttttttt] [tttttttttt] [tttttttttt] [tttttttttt] [tttttttttt] [tttttttttt] [tttttttttt] [tttttttttt] [tttttttttt] [tttttttttt] [tttttttttt] [tttttttttt] tttttttttt]
Если первые два бита после знакового бита равны «11», то вторые два бита являются ведущими битами экспоненты, а последний бит имеет префикс «100», чтобы сформировать ведущую десятичную цифру (8 или 9):
s 1100 T (00) eeeeeeeeeeee (100T) [tttttttttt] [tttttttttt] [tttttttttt] [ttt ttttttt] [tttttttttt] [tttttttttt] [tttttttttt] [tttttttttt] [tttttttttt] [tttttttttt] [tttttttttt]
s 1101 T (01) eeeeeeeeeeee (100T) [tttttttttt] [tttttttttt] [tttttttttt] [tttttttttt] [tttttttttt] [tttttttttt] [tttttttttt] ] [tttttttttt] [tttttttttt] [tttttttttt] [tttttttttt] [tttttttttt] [tttttttttt] [tttttttttt]
s 1110 T (10) eeeeeeeeeeee (100T) [ttttttttttt] [tttttttt] [ttttttttt] [ttttttttt] [ttttttttt] [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 b2 b1 b0 d2 d1 d0 Кодированные значения Описание Вхождения (1000 состояний) 50,0% (512 состояний) a b c d e f 0 g h i 0abc 0def 0ghi (0–7) (0–7) (0–7) Три маленькие цифры 51,2% (512 состояний) 37,5% (384 состояния) a b c d e f 1 0 0 i 0abc 0def 100 i (0–7) (0–7) (8–9) Две маленькие цифры,. одна большая 38,4% (384 состояния) a b c g h f 1 0 1 i 0abc 100 f 0ghi (0–7) (8–9) (0–7) g h c d e f 1 1 0 i 100 c 0def 0ghi (8–9) (0–7) (0– 7) 9,375% (96 состояний) g h c 0 0 f 1 1 1 i 100 c 100 f 0ghi (8–9) (8–9) (0–7) Одна маленькая цифра,. два больших 9,6% (96 состояний) d e c 0 1 f 1 1 1 i 100 c 0def 100 i (8–9) (0–7) (8–9) a b c 1 0 f 1 1 1 i 0abc 100 f 100 i (0–7) (8–9) (8–9) 3,125% (32 состояния, 8 использовано) x x c 1 1 f 1 1 1 i 100 c 100 f 100 i (8–9) (8–9) (8–9) Три большие цифры, биты b9 и b8 равны безразлично 0,8% (8 состояний) 8 десятичных значений, все цифры которых 8 или 9 имеют четыре кодировки. Биты, отмеченные x в приведенной выше таблице, игнорируются при вводе, но всегда будут равны 0 в вычисленных результатах. (8 × 3 = 24 нестандартных кодирования заполняют промежуток между 10 = 1000 и 2 = 1024.)
В приведенных выше случаях, когда истинное значение представляет собой последовательность декодированных десятичных цифр, значение представлено
См. Также
- ISO / IEC 10967, Независимая от языка арифметика
- Примитивный тип данных
Ссылки