WikiDer > Формат Decimal32 с плавающей запятой
Плавающая точка форматы |
---|
IEEE 754 |
|
Другой |
В вычисление, десятичный32 это десятичная с плавающей запятой формат нумерации компьютеров занимающий 4 байта (32 бита) в памяти компьютера. Он предназначен для приложений, в которых необходимо точно имитировать десятичное округление, таких как финансовые и налоговые вычисления. Словно двоичный16 формат, он предназначен для хранения с экономией памяти.
Decimal32 поддерживает 7 десятичные цифры из значимое и показатель степени диапазон от -95 до +96, т.е. ±0.000000×10 −95 к ±9.999999×10 96. (Эквивалентно, ±0000001×10 −101 к ±9999999×10 90.) Поскольку значение не нормализовано (нет неявной ведущей "1"), большинство значений меньше 7 значащие цифры иметь несколько возможных представлений; 1 × 102=0.1 × 103=0.01 × 104и т. д. Zero имеет 192 возможных представления (384, когда оба подписанные нули включены).
Decimal32 с плавающей запятой - это относительно новый десятичный формат с плавающей запятой, официально представленный в Версия 2008 г.[1] из IEEE 754 а также с ISO / IEC / IEEE 60559: 2011.[2]
Представление значений decimal32
Знак | Комбинация | Продолжение экспоненты | Коэффициент продолжения |
---|---|---|---|
1 бит | 5 бит | 6 бит | 20 бит |
s | ммммм | xxxxxx | cccccccccccccccccccc |
IEEE 754 допускает два альтернативных метода представления значений decimal32. Стандарт не определяет, как обозначать, какое представление используется, например, в ситуации, когда значения decimal32 передаются между системами.
В одном методе представления, основанном на двоичное целое десятичное (BID) мантисса представлена как положительное целое число в двоичной кодировке.
Другой, альтернативный, способ представления основан наплотно упакованный десятичный (DPD) для большей части значащей цифры (кроме старшей цифры).
Обе альтернативы обеспечивают точно такой же диапазон представимых чисел: 7 значащих цифр и 3 × 26=192 возможные значения экспоненты.
В обоих случаях старшие 4 бита мантиссы (которые на самом деле имеют только 10 возможных значений) объединяются с 2 старшими битами экспоненты (3 возможных значения), чтобы использовать 30 из 32 возможных значений 5-битной поле называется комбинированным полем. Остальные комбинации кодируют бесконечности и NaNs.
Комбинированное поле | MSB | Код Ценить | Описание | ||||||
---|---|---|---|---|---|---|---|---|---|
м4 | м3 | m2 | m1 | m0 | Exp. | Значительный | |||
0 | 0 | а | б | c | 00 | 0abc | (0–7) | Цифра до 7 | |
0 | 1 | а | б | c | 01 | 0abc | |||
1 | 0 | а | б | c | 10 | 0abc | |||
1 | 1 | 0 | 0 | c | 00 | 100c | (8–9) | Цифра больше 7 | |
1 | 1 | 0 | 1 | c | 01 | 100c | |||
1 | 1 | 1 | 0 | c | 10 | 100c | |||
1 | 1 | 1 | 1 | 0 | ± бесконечность | ||||
1 | 1 | 1 | 1 | 1 | NaN |
Знаковый бит NaN игнорируется. Первый бит оставшейся экспоненты определяет, является ли NaN тихим или сигнальным.
Поле двоичного целочисленного значения
В этом формате используется двоичное значение от 0 до 10.7 − 1 = 9999999 = 98967F16 = 1001100010010110011111112. Кодирование может представлять двоичные значения до 10 × 2.20 − 1 = 10485759 = 9FFFFF16 = 1001111111111111111111112, но значения больше 107 -1 являются недопустимыми (и стандарт требует, чтобы реализации обрабатывали их как 0, если они встречаются на входе).
Как описано выше, кодирование варьируется в зависимости от того, находятся ли наиболее значимые 4 бита значения в диапазоне от 0 до 7 (00002 к 01112) или выше (10002 или 10012).
Если 2 бита после знакового бита равны «00», «01» или «10», то поле экспоненты состоит из 8 бит, следующих за битом знака, а значащее значение - это оставшиеся 23 бита с неявным ведущим 0 битом. :
s 00eeeeee (0) ttt tttttttttt tttttttttts 01eeeeee (0) ttt tttttttttt tttttttttts 10eeeeee (0) ttt tttttttttt tttttttttt
Это включает в себя субнормальные числа где первая цифра мантиссы равна 0.
Если 2 бита после знакового бита равны «11», то 8-битное поле экспоненты сдвигается на 2 бита вправо (после как знакового бита, так и «11» битов после этого), и представленное значение находится в оставшейся 21 бит. В этом случае имеется неявная (то есть не сохраненная) ведущая 3-битная последовательность "100" в истинном значении.
s 1100eeeeee (100) t tttttttttt tttttttttts 1101eeeeee (100) t tttttttttt tttttttttts 1110eeeeee (100) t tttttttttt tttttttttt
2-битная последовательность «11» после знакового бита указывает, что существует скрытый "100" 3-битный префикс мантиссы. Сравните наличие неявной 1 в значении нормальных значений для двоичных форматов. Биты «00», «01» или «10» являются частью поля экспоненты.
Старшие биты поля значащей нет закодировать самый старший десятичный разряд; они просто являются частью большего чисто двоичного числа. Например, значение 8000000 кодируется как двоичный 011110100001001000000000, с ведущими 4 битами, кодирующими 7; первая мантисса, требующая 24-го бита, равна 223 = 8388608
В приведенных выше случаях представлено значение
- (−1)знак × 10показатель −101 × значимое
Если четыре бита после знакового бита равны «1111», тогда значение равно бесконечности или NaN, как описано выше:
s 11110 xx ... x ± бесконечность 11111 0x ... x тихий NaN 11111 1x ... x сигнальный NaN
Плотно упакованное десятичное значащее поле
В этой версии мантисса хранится в виде серии десятичных цифр. Первая цифра находится между 0 и 9 (3 или 4 двоичных бита), а остальная часть мантиссы использует плотно упакованная десятичная дробь (DPD) кодирование.
Первые 2 бита экспоненты и первая цифра (3 или 4 бита) мантиссы объединяются в пять битов, следующих за битом знака.
Эти шесть битов после этого представляют собой поле продолжения экспоненты, обеспечивающее менее значимые биты экспоненты.
Последние 20 бит - это поле продолжения мантиссы, состоящее из двух 10-битных деклеты.[3] Каждый деклет кодирует три десятичных цифры[3] с использованием кодировки 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] [tttttttttt] [tttttttttt] [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 | грамм | час | я | 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. Получено 2016-02-08.
- ^ «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.