WikiDer > Формат Decimal128 с плавающей запятой
| Плавающая точка форматы |
|---|
| IEEE 754 |
|
| Другой |
В вычисление, десятичный128 это десятичная с плавающей запятой формат нумерации компьютеров который занимает в памяти компьютера 16 байт (128 бит). Он предназначен для приложений, в которых необходимо точно имитировать десятичное округление, например для финансовых и налоговых расчетов.
Decimal128 поддерживает 34 десятичные цифры из значимое и показатель степени диапазон от −6143 до +6144, т. е. ±0.000000000000000000000000000000000×10−6143 к ±9.999999999999999999999999999999999×106144. (Эквивалентно, ±0000000000000000000000000000000000×10−6176 к ±9999999999999999999999999999999999×106111.) Следовательно, у 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 tttttttttts 01eeeeeeeeeeee (0) ttt tttttttttt tttttttttt tttttttttt tttttttttt tttttttttt tttttttttt tttttttttt tttttttttt tttttttttt tttttttttt tttttttttts 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 tttttttttts 1101eeeeeeeeeeee (100) t tttttttttt tttttttttt tttttttttt tttttttttt tttttttttt tttttttttt tttttttttt tttttttttt tttttttttt tttttttttt tttttttttts 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.