decimal32 формат с плавающей запятой
с плавающей запятой Форматы |
---|
ИЭЭЭ 754 |
|
Другой |
Альтернативы |
В вычислительной технике decimal32 — это с плавающей запятой десятичный формат компьютерной нумерации , который занимает 4 байта (32 бита) в памяти компьютера. Он предназначен для приложений, в которых необходимо точно имитировать десятичное округление, например, для финансовых и налоговых вычислений. Как и формат двоичный16 , он предназначен для хранения с экономией памяти.
Decimal32 поддерживает 7 десятичных цифр и мантиссы диапазон показателей от -95 до +96, т. е. ±0,000 000 × 10 −95 до ± 9,999 999 × 10 96 . (Эквивалентно ±0 000 000 × 10 −101 до ±9 999 999 × 10 90 .) Поскольку мантисса не нормализована (нет неявной ведущей «1»), большинство значений с менее чем 7 значащими цифрами имеют несколько возможных представлений; 1 × 10 2 = 0.1 × 10 3 = 0.01 × 10 4 и т. д. Ноль имеет 192 возможных представления (384, если оба знаковых нуля включены ).
Decimal32 с плавающей запятой — относительно новый формат десятичных чисел с плавающей запятой, официально представленный в версии 2008 года. [ 1 ] IEEE 754 , а также ISO/IEC/IEEE 60559:2011 . [ 2 ]
Представление десятичных значений32
[ редактировать ]Знак | Комбинация | Завершающее значимое поле |
---|---|---|
1 бит | 11 бит | 20 бит |
s |
ggggggggggg |
tttttttttttttttttttt
|
IEEE 754 допускает два альтернативных метода представления десятичных значений32. Стандарт не определяет, как указать, какое представление используется. например, в ситуации, когда значения decimal32 передаются между системами.
В одном методе представления, основанном на двоично-цело-десятичном формате (BID), мантисса представляется как положительное целое число в двоичном коде.
Другой, альтернативный метод представления основан на плотно упакованная десятичная дробь (DPD) для большинства мантисса (кроме самой старшей цифры).
Обе альтернативы предоставляют одинаковый диапазон представимых чисел: 7 цифр мантиссы и 3 × 2. 6 = 192 возможных значения показателя степени.
В обеих кодировках, BID и DPD, 2 старших бита экспоненты и 4 старших бита мантиссы объединяются в 5 бит. Положение 5 бит в поле комбинации варьируется, но в остальном кодировка идентична. Вместо 6 достаточно 5 бит, поскольку 2 старших бита экспоненты кодируют только значения от 0 до 2 (3 возможных значения), а 4 старших бита мантиссы представляют десятичную цифру от 0 до 9 (10 возможных значений). Всего у нас есть 3*10 = 30 возможных значений при объединении в одну кодировку, которая представляется в 5 битах ( ).
Комбинированное поле | MSB из | младшие разряды Экспонента |
Описание | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
g10 | g9 | g8 | g7 | g6 | g5 | g4 | g3 | g2 | г1 | г0 | Экспонента | Значение | |||
0 | 0 | д | и | ж | г | час | я | а | б | с | 00 | 0 абв | дефги | Конечное число полное двоичное значение = 0 abc ттттттттттттттттттт | |
0 | 1 | 01 | |||||||||||||
1 | 0 | 10 | |||||||||||||
1 | 1 | 0 | 0 | д | и | ж | г | час | я | с | 00 | 100 с | Конечное число полное двоичное значение = 100 с ттттттттттттттттттт | ||
1 | 1 | 0 | 1 | 01 | |||||||||||
1 | 1 | 1 | 0 | 10 | |||||||||||
1 | 1 | 1 | 1 | 0 | ±Infinity | ||||||||||
1 | 1 | 1 | 1 | 1 | NaN (с полезной нагрузкой в мантиссе) |
Комбинированное поле | MSB из | младшие разряды Экспонента |
Ведущее значение Десятичная цифра |
Описание | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
g10 | g9 | g8 | g7 | g6 | g5 | g4 | g3 | g2 | г1 | г0 | Экспонента | Значение | ||||
0 | 0 | а | б | с | д | и | ж | г | час | я | 00 | 0 абв | дефги | 4*а + 2*б + в | Конечное число с | |
0 | 1 | 01 | ||||||||||||||
1 | 0 | 10 | ||||||||||||||
1 | 1 | 0 | 0 | с | 00 | 100 с | 8 + с | Конечное число с | ||||||||
1 | 1 | 0 | 1 | 01 | ||||||||||||
1 | 1 | 1 | 0 | 10 | ||||||||||||
1 | 1 | 1 | 1 | 0 | ±Infinity | |||||||||||
1 | 1 | 1 | 1 | 1 | NaN (с полезной нагрузкой в мантиссе) |
Для кодирования BID полная двоичная мантисса получается путем добавления битов из конечного поля мантиссы к старшим битам мантиссы, как показано в таблице BID выше. Результирующая мантисса представляет собой положительное двоичное целое число длиной 24 бита, которое необходимо многократно разделить на 10, чтобы получить отдельные десятичные цифры.
Для кодирования DPD в приведенной выше таблице DPD показано, как получить первую десятичную цифру мантиссы из старших битов мантиссы. Чтобы получить конечные значащие и десятичные цифры, значащее конечное поле должно быть декодировано в соответствии с правилами DPD (см. ниже). Затем полная десятичная мантисса получается путем объединения первых и конечных десятичных цифр.
Для ±Infinity, кроме знакового бита, все остальные биты игнорируются (т. е. поля экспоненты и мантиссы не имеют никакого эффекта). Для NaN знаковый бит не имеет значения в стандарте и игнорируется. Таким образом, подписанные и беззнаковые NaN эквивалентны, хотя некоторые программы отображают NaN как подписанные. Бит g5 определяет, является ли NaN тихим (0) или сигнальным (1). Биты мантиссы представляют собой полезную нагрузку NaN и могут содержать определяемые пользователем данные (например, для определения того, как были сгенерированы NaN). Как и в случае с обычными мантиссами, полезная нагрузка NaN может быть либо в кодировке BID, либо в DPD.
Поле двоичного целочисленного значения
[ редактировать ]В этом формате используется двоичное значение от 0 до 10. 7 − 1 = 9 999 999 = 98967F 16 = 1001 1000100101 1001111111 2 . Кодировка может представлять двоичные значения до 10 × 2. 20 − 1 = 10 485 759 = 9FFFFF 16 = 1001 1111111111 1111111111 2 , но значения больше 10 7 − 1 недопустимы (и стандарт требует, чтобы реализации обрабатывали их как 0, если они встречаются на входе).
Как описано выше, кодирование варьируется в зависимости от того, находятся ли старшие 4 бита мантиссы в диапазоне от 0 до 7 (от 0000 2 до 0111 2 ) или выше (1000 2 или 1001 2 ).
Если два бита после знакового бита равны «00», «01» или «10», то Поле экспоненты состоит из 8 бит, следующих за знаковым битом, и Мантисса — это оставшиеся 23 бита с неявным ведущим нулевым битом:
s 00eeeeee (0)ttt tttttttttt tttttttttt s 01eeeeee (0)ttt tttttttttt tttttttttt s 10eeeeee (0)ttt tttttttttt tttttttttt
Сюда входят субнормальные числа , у которых старшая значащая цифра равна 0.
Если 2 бита после знакового бита равны «11», то 8-битное поле показателя степени сдвигается на 2 бита вправо (как после знакового бита, так и после бита «11»), а представленная мантисса находится в оставшейся части. 21 бит . В этом случае имеется неявная (то есть не сохраненная) ведущая 3-битная последовательность «100» в истинной мантиссе.
s 1100eeeeee (100)t tttttttttt tttttttttt s 1101eeeeee (100)t tttttttttt tttttttttt s 1110eeeeee (100)t tttttttttt tttttttttt
имеется неявный 2-битная последовательность «11» после знакового бита указывает на то, что к мантиссе 3-битный префикс «100». Сравните наличие неявной 1 в мантиссе нормальных значений для двоичных форматов. Биты «00», «01» или «10» являются частью поля показателя степени.
Старшие биты поля мантиссы не кодируют старшую десятичную цифру; они просто являются частью большего чисто двоичного числа. Например, мантисса 8 000 000 кодируется как двоичная 0111 1010000100 1000000000 с ведущими 4 битами , кодирующими 7; первая мантисса, для которой требуется 24-й бит, равна 2 23 = 8 388 608
В приведенных выше случаях представленное значение равно
- (−1) знак × 10 показатель степени −101 × мантисса
Если четыре бита после знакового бита равны «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).
Два ведущих бита экспоненты и первая цифра (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]
Если первые два бита после знакового бита равны «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 штата) |
б9 | б8 | b7 | б6 | б5 | б4 | б3 | б2 | б1 | б0 | d2 | d1 | д0 | Закодированные значения | Описание | События (1000 штатов) | |
50.0% (512 штатов) |
а | б | с | д | и | ж | 0 | г | час | я | 0 абв | 0 защита | 0 гхи | (0–7) (0–7) (0–7) | 3 маленькие цифры | 51.2% (512 штатов) | |
37.5% (384 штата) |
а | б | с | д | и | ж | 1 | 0 | 0 | я | 0 абв | 0 защита | 100 я | (0–7) (0–7) (8–9) | 2 маленькие цифры, 1 большая цифра |
38.4% (384 штата) | |
а | б | с | г | час | ж | 1 | 0 | 1 | я | 0 абв | 100 ф | 0 гхи | (0–7) (8–9) (0–7) | ||||
г | час | с | д | и | ж | 1 | 1 | 0 | я | 100 с | 0 защита | 0 гхи | (8–9) (0–7) (0–7) | ||||
9.375% (96 штатов) |
г | час | с | 0 | 0 | ж | 1 | 1 | 1 | я | 100 с | 100 ф | 0 гхи | (8–9) (8–9) (0–7) | 1 маленькая цифра, 2 большие цифры |
9.6% (96 штатов) | |
д | и | с | 0 | 1 | ж | 1 | 1 | 1 | я | 100 с | 0 защита | 100 я | (8–9) (0–7) (8–9) | ||||
а | б | с | 1 | 0 | ж | 1 | 1 | 1 | я | 0 абв | 100 ф | 100 я | (0–7) (8–9) (8–9) | ||||
3.125% (32 штата, 8 использовано) |
х | х | с | 1 | 1 | ж | 1 | 1 | 1 | я | 100 с | 100 ф | 100 я | (8–9) (8–9) (8–9) | 3 большие цифры, b9, b8: плевать |
0.8% (8 штатов) |
Восемь десятичных значений, все цифры которых равны 8 или 9, имеют по четыре кодировки каждое. Биты, отмеченные x в таблице выше, игнорируются при вводе, но в результатах вычислений всегда будут равны 0. ( 8 × 3 = 24 нестандартных кодировки заполняют пробел между 10 3 = 1000 и 2 10 = 1024. )
В приведенных выше случаях, когда истинная мантисса представляет собой декодированную последовательность десятичных цифр, представленное значение равно
См. также
[ редактировать ]Ссылки
[ редактировать ]- ^ Компьютерное общество IEEE (29 августа 2008 г.). Стандарт IEEE для арифметики с плавающей запятой . ИИЭЭ . дои : 10.1109/IEESTD.2008.4610935 . ISBN 978-0-7381-5753-5 . Стандарт IEEE 754-2008 . Проверено 8 февраля 2016 г.
- ^ «ИСО/МЭК/ИИЭР 60559:2011» . 2011 . Проверено 8 февраля 2016 г.
{{cite journal}}
: Для цитирования журнала требуется|journal=
( помощь ) - ^ Jump up to: а б Мюллер, Жан-Мишель; Бризебар, Николя; из Динешена, Флоран; Жаннерод, Клод-Пьер; Лефевр, Винсент; Мелькионд, Гийом; Револь, Натали ; Штеле, Дэмиен; Торрес, Серж (2010). Справочник по арифметике с плавающей запятой (1-е изд.). Биркхойзер . дои : 10.1007/978-0-8176-4705-6 . ISBN 978-0-8176-4704-9 . LCCN 2009939668 .
- ^ Коулишоу, Майкл Фредерик (13 февраля 2007 г.) [03 октября 2000 г.]. «Краткое описание плотно упакованного десятичного кодирования» . ИБМ . Архивировано из оригинала 24 сентября 2015 г. Проверено 7 февраля 2016 г.