Формат Decimal128 с плавающей запятой - Decimal128 floating-point format
Плавающая точка форматы |
---|
IEEE 754 |
|
Другой |
В вычисление, десятичный128 это десятичная с плавающей запятой формат нумерации компьютеров который занимает в памяти компьютера 16 байт (128 бит). Он предназначен для приложений, в которых необходимо точно имитировать десятичное округление, например для финансовых и налоговых расчетов.
Decimal128 поддерживает 34 десятичные цифры из значимое и показатель степени диапазон от −6143 до +6144, т. е. ±0.000000000000000000000000000000000×10 −6143 к ±9.999999999999999999999999999999999×10 6144. (Эквивалентно, ±0000000000000000000000000000000000×10 −6176 к ±9999999999999999999999999999999999×10 6111.) Следовательно, у decimal128 самый большой диапазон значений по сравнению с другими базовыми форматами с плавающей запятой IEEE. Поскольку мантисса не нормализована, большинство значений меньше 34 значащие цифры иметь несколько возможных представлений; 1 × 102=0.1 × 103=0.01 × 104и т.д. Zero имеет 12288 возможные представления (24576 если оба подписанные нули включены).
Decimal128 с плавающей запятой - это относительно новый десятичный формат с плавающей запятой, официально представленный в Версия 2008 г.[1] из IEEE 754 а также с ISO / IEC / IEEE 60559: 2011.[2]
Представление десятичных128 значений
Знак | Комбинация | Значимое и продолжение |
---|---|---|
1 бит | 17 бит | 110 бит |
s | мммммммммммммммм | cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc |
IEEE 754 позволяет использовать два альтернативных метода представления для значений decimal128. Стандарт не определяет, как обозначать, какое представление используется, например, в ситуации, когда десятичные128 значения передаются между системами.
В одном методе представления, основанном на двоичное целое десятичное (BID) мантисса представлена как положительное целое число в двоичной кодировке.
Другой, альтернативный, способ представления основан на плотно упакованная десятичная дробь (DPD) для большей части значащей (кроме старшей цифры).
Обе альтернативы обеспечивают точно такой же диапазон представимых чисел: 34 значащих цифры и 3 × 2.12 = 12288 возможные значения экспоненты.
В обоих случаях 4 старших разряда мантиссы (которые на самом деле имеют только 10 возможных значений) объединяются с 2 старшими битами показателя степени (3 возможных значения) для использования 30 из 32 возможных значений 5 бит в комбинированное поле. Остальные комбинации кодируют бесконечности и NaNs.
Комбинированное поле | Экспонента | Значимость 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 = 9999999999999999999999999999999999 = 1ED09BEAD87C0378D8E63FFFFFFFF16 = 0111101101000010011011111010101101100001111100000000110111100011011000111001100011111111111111111111111111111111112Кодирование может представлять двоичные значения до 10 × 2.110 − 1 = 12980742146337069071326240823050239 но значения больше 1034 -1 являются недопустимыми (и стандарт требует, чтобы реализации обрабатывали их как 0, если они встречаются на входе).
Как описано выше, кодирование варьируется в зависимости от того, находятся ли наиболее значимые 4 бита значения в диапазоне от 0 до 7 (00002 к 01112) или выше (10002 или 10012).
Если 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» после знакового бита указывает, что существует скрытый "100" 3-битный префикс мантиссы. Сравните наличие неявной 1 в значении нормальных значений для двоичных форматов. Биты «00», «01» или «10» являются частью поля экспоненты.
Для формата decimal128 все эти значения находятся вне допустимого диапазона (они начинаются с 2113 > 1.038 × 1034), и поэтому декодируются как ноль, но шаблон такой же, как десятичный32 и десятичный64.
В приведенных выше случаях представлено значение
- (−1)знак × 10показатель −6176 × значимое
Если четыре бита после знакового бита равны «1111», тогда значение равно бесконечности или NaN, как описано выше:
s 11110 xx ... x ± бесконечность 11111 0x ... x тихий NaN 11111 1x ... x сигнальный NaN
Плотно упакованное десятичное значащее поле
В этой версии мантисса хранится в виде серии десятичных цифр. Первая цифра находится между 0 и 9 (3 или 4 двоичных бита), а остальная часть мантиссы использует плотно упакованная десятичная дробь (DPD) кодирование.
Первые 2 бита экспоненты и первая цифра (3 или 4 бита) мантиссы объединяются в пять битов, следующих за битом знака.
Эти двенадцать битов после этого являются полем продолжения экспоненты, обеспечивая менее значимые биты экспоненты.
Последние 110 бит - это поле продолжения мантиссы, состоящее из одиннадцати 10-битных деклеты.[3] Каждый деклет кодирует три десятичных цифры[3] с использованием кодировки DPD.
Если первые два бита после знакового бита равны «00», «01» или «10», то это ведущие биты экспоненты, а три бита после них интерпретируются как ведущая десятичная цифра (от 0 до 7 ):
s 00 TTT (00) eeeeeeeeeeee (0TTT) [tttttttttt] [tttttttttt] [tttttttttt] [tttttttttt] [tttttttttt] [tttttttttt] [tttttttttt] [tttttttttt] [tttttttttt] [tttttttttt] [ttttttttttt] [tttttttttt] [tttttttttt] [tttttttttt] [tttttttttt] [tttttttttt] [ttttttttttt]
s 01 TTT (01) eeeeeeeeeeee (0TTT) [tttttttttt] [tttttttttt] [tttttttttt] [tttttttttt] [tttttttttt] [tttttttttt] [tttttttttt] [tttttttttt] [tttttttttt] [tttttttttt] [tttttttttt] [tttttttttt] [tttttttttt] [tttttttttt] [tttttttttt] [tttttttttt] [tttttttttt] [tttttttttt] [ttttttttttt]
s 10 TTT (10) eeeeeeeeeeee (0TTT) [tttttttttt] [tttttttttt] [tttttttttt] [tttttttttt] [tttttttttt] [tttttttttt] [tttttttttt] [tttttttttt] [tttttttttt] [tttttttttt] [tttttttttt] [tttttttttt] [tttttttttt] [tttttttttt] [tttttttttt] [ttt
Если первые два бита после знакового бита равны «11», то вторые два бита являются ведущими битами экспоненты, а последний бит имеет префикс «100» для формирования ведущей десятичной цифры (8 или 9):
с 1100 T (00) eeeeeeeeeeee (100T) [tttttttttt] [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] [tttttttttt]
s 1110 T (10) eeeeeeeeeeee (100T) [tttttttttt] [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 | грамм | час | я | 0abc | 0def | 0Гхи | (0–7) (0–7) (0–7) | Три маленькие цифры | 51,2% (512 штатов) | |
37,5% (384 государства) | а | б | c | d | е | ж | 1 | 0 | 0 | я | 0abc | 0def | 100я | (0–7) (0–7) (8–9) | Две маленькие цифры, один большой | 38,4% (384 государства) | |
а | б | c | грамм | час | ж | 1 | 0 | 1 | я | 0abc | 100ж | 0Гхи | (0–7) (8–9) (0–7) | ||||
грамм | час | c | d | е | ж | 1 | 1 | 0 | я | 100c | 0def | 0Гхи | (8–9) (0–7) (0–7) | ||||
9,375% (96 штатов) | грамм | час | c | 0 | 0 | ж | 1 | 1 | 1 | я | 100c | 100ж | 0Гхи | (8–9) (8–9) (0–7) | Одна маленькая цифра, два больших | 9,6% (96 штатов) | |
d | е | c | 0 | 1 | ж | 1 | 1 | 1 | я | 100c | 0def | 100я | (8–9) (0–7) (8–9) | ||||
а | б | c | 1 | 0 | ж | 1 | 1 | 1 | я | 0abc | 100ж | 100я | (0–7) (8–9) (8–9) | ||||
3,125% (32 штата, 8 использовано) | Икс | Икс | c | 1 | 1 | ж | 1 | 1 | 1 | я | 100c | 100ж | 100я | (8–9) (8–9) (8–9) | Три большие цифры, биты b9 и b8 - это все равно | 0,8% (8 штатов) |
8 десятичных значений, все цифры которых равны 8 или 9, имеют четыре кодировки каждое. Биты, отмеченные x в таблице выше, являются игнорируется на входе, но в вычисленных результатах всегда будет 0 (8 × 3 = 24 нестандартных кодирования заполняют промежуток между 103 = 1000 и 210 = 1024.)
В вышеуказанных случаях с истинное значение как последовательность десятичных цифр, представленное значение
Смотрите также
- ISO / IEC 10967, Независимая от языка арифметика
- Примитивный тип данных
Рекомендации
- ^ IEEE Computer Society (29 августа 2008 г.). Стандарт IEEE для арифметики с плавающей запятой. IEEE. Дои:10.1109 / IEEESTD.2008.4610935. ISBN 978-0-7381-5753-5. IEEE Std 754-2008.
- ^ «ISO / IEC / IEEE 60559: 2011». 2011. Получено 2016-02-08. Цитировать журнал требует
| журнал =
(помощь) - ^ а б Мюллер, Жан-Мишель; Брисебар, Николас; де Динешен, Флоран; Жаннерод, Клод-Пьер; Лефевр, Винсент; Мелькионд, Гийом; Revol, Натали; Stehlé, Damien; Торрес, Серж (2010). Справочник по арифметике с плавающей точкой (1-е изд.). Биркхойзер. Дои:10.1007/978-0-8176-4705-6. ISBN 978-0-8176-4704-9. LCCN 2009939668.
- ^ Коулишоу, Майкл Фредерик (2007-02-13) [2000-10-03]. "Краткое описание плотно упакованного десятичного кодирования". IBM. В архиве из оригинала от 24.09.2015. Получено 2016-02-07.