десятичный формат с плавающей запятой128
с плавающей запятой Форматы |
---|
ИЭЭЭ 754 |
|
Другой |
Альтернативы |
decimal128 — это с плавающей запятой десятичный формат компьютерных чисел , который занимает 128 бит в памяти компьютера . Официально представлено в IEEE 754-2008 . [1] он предназначен для приложений, где необходимо точно имитировать десятичное округление, например, для финансовых и налоговых вычислений. [2]
decimal128 поддерживает 34 десятичные цифры мантиссы от и диапазон показателей +6144, т.е. ±0,000 000 000 000 000 000 000 000 000 000 000 -6143 до × 10 −6143 до ±9,999 999 999 999 999 999 999 999 999 999 999 × 10 6144 . Поскольку мантисса не нормализована, большинство значений с числом значащих цифр менее 34 имеют несколько возможных представлений; 1 × 10 2 = 0.1 × 10 3 = 0.01 × 10 4 и т. д. Ноль имеет 12288 возможных представлений (24576, включая отрицательный ноль ).
Представление десятичных значений128
[ редактировать ]Знак | Комбинация | Значимое и продолжение |
---|---|---|
1 бит | 17 бит | 110 бит |
с | мммммммммммммм | cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc |
IEEE 754 допускает два альтернативных метода представления десятичных значений128. Стандарт не определяет, как указать, какое представление используется, например, в ситуации, когда десятичные значения128 передаются между системами.
В одном методе представления, основанном на двоичном целочисленном десятичном формате (BID), мантисса представляется как положительное целое число в двоичном коде.
Другой, альтернативный метод представления основан на плотно упакованной десятичной дроби (DPD) для большей части мантиссы (кроме самой старшей цифры).
Обе альтернативы предоставляют одинаковый диапазон представимых чисел: 34 цифры мантиссы и 3 × 2. 12 = 12 288 возможных значений показателя степени.
В обоих случаях старшие 4 бита мантиссы (которые на самом деле имеют только 10 возможных значений) объединяются со старшими 2 битами экспоненты (3 возможных значения), чтобы использовать 30 из 32 возможных значений по 5 бит в комбинированное поле. Остальные комбинации кодируют бесконечности и NaN .
Комбинированное поле | Экспонента | Значимое число Мбитов | Другой |
---|---|---|---|
00мммммммммммммм | 00xxxxxxxxxxxxxxx | 0cc | — |
01мммммммммммммм | 01xxxxxxxxxxxxxxx | 0cc | — |
10 мммммммммммммм | 10xxxxxxxxxxxx | 0cc | — |
1100 мммммммммммм | 00xxxxxxxxxxxxxxx | 100с | — |
1101мммммммммммм | 01xxxxxxxxxxxxxxx | 100с | — |
1110мммммммммммммм | 10xxxxxxxxxxxx | 100с | — |
11110мммммммммммм | — | — | ±Infinity |
11111мммммммммммм | — | — | НаН . Знаковый бит игнорируется. Шестой бит поля комбинации определяет, передает ли NaN сигнал. |
В случае Infinity и NaN все остальные биты кодировки игнорируются. Таким образом, можно инициализировать массив значениями Infinities или NaN, заполнив его однобайтовым значением.
Поле двоичного целочисленного значения
[ редактировать ]В этом формате используется двоичное значение от 0 до 10. 34 − 1 = 9 999 999 999 999 999 999 999 999 999 999 999 = 1ED09BEAD87C0378D8E63FFFFFFFF 16 = 0111 1011010000 1001101111 1010101101 1000011111 0000000011 0111100011 0110001110 0110001111 1111111111 1111111111 111 2 . Кодировка может представлять двоичные значения до 10 × 2. 110 − 1 = 12 980 742 146 337 069 071 326 240 823 050 239 , но значения больше 10 34 − 1 недопустимы (и стандарт требует, чтобы реализации обрабатывали их как 0, если они встречаются на входе).
Как описано выше, кодирование варьируется в зависимости от того, находятся ли старшие 4 бита мантиссы в диапазоне от 0 до 7 (от 0000 2 до 0111 2 ) или выше (1000 2 или 1001 2 ).
Если два бита после знакового бита равны «00», «01» или «10», то Поле экспоненты состоит из 14 бит, следующих за знаковым битом, и Мантисса — это оставшиеся 113 битов с неявным ведущим нулевым битом:
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» после знакового бита указывает на то, что к мантиссе 3-битный префикс «100». Сравните наличие неявной 1 в мантиссе нормальных значений для двоичных форматов. Биты «00», «01» или «10» являются частью поля показателя степени.
Для формата decimal128 все эти мантиссы выходят за пределы допустимого диапазона (они начинаются с 2) . 113 > 1,038 × 10 34 ), и поэтому декодируются как ноль, но шаблон такой же, как decimal32 и decimal64 .
В приведенных выше случаях представленное значение равно
- (−1) знак × 10 показатель степени-6176 × мантисса
Если четыре бита после знакового бита равны «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 бита) мантиссы объединяются в пять битов, следующих за знаковым битом.
Следующие двенадцать битов являются полем продолжения экспоненты, предоставляющим менее значащие биты экспоненты.
Последние 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][tttttttttt] s 01 TTT (01)eeeeeeeeeeee (0TTT)[tttttttttt][tttttttttt][tttttttttt][tttttttttt][tttttttttt][tttttttttt][tttttttttt][tttttttttt][tttttttttt][tttttttttt][tttttttttt] s 10 TTT (10)eeeeeeeeeeee (0TTT)[tttttttttt][tttttttttt][tttttttttt][tttttttttt][tttttttttt][tttttttttt][tttttttttt][tttttttttt][tttttttttt][tttttttttt][tttttttttt]
Если первые два бита после знакового бита равны «11», то вторые два бита являются старшими битами показателя степени, а последний бит имеет префикс «100», образующий старшую десятичную цифру (8 или 9):
s 1100 T (00)eeeeeeeeeeee (100T)[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] s 1110 T (10)eeeeeeeeeeee (100T)[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 штата) |
б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 .)
В приведенных выше случаях, когда истинная мантисса представляет собой декодированную последовательность десятичных цифр, представленное значение равно
См. также
[ редактировать ]- ISO/IEC 10967 , Независимая от языка арифметика
- Примитивный тип данных
- Обозначение Q (научное обозначение)
Ссылки
[ редактировать ]- ^ Компьютерное общество IEEE (29 августа 2008 г.). Стандарт IEEE для арифметики с плавающей запятой . ИИЭЭ . doi : 10.1109/IEESTD.2008.4610935 . ISBN 978-0-7381-5753-5 . Стандарт IEEE 754-2008.
- ^ Коулишоу, Майк (2007). «Часто задаваемые вопросы по десятичной арифметике – Часть 1 – Общие вопросы» . speleotrove.com . Корпорация IBM . Проверено 29 июля 2022 г.
- ^ 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 г.