формат чисел с плавающей запятой decimal64
с плавающей запятой Форматы |
---|
ИЭЭЭ 754 |
|
Другой |
Альтернативы |
В вычислительной технике decimal64 — это с плавающей запятой десятичный компьютерный формат , который занимает 8 байтов (64 бита) в памяти компьютера. Он предназначен для приложений, в которых необходимо точно имитировать десятичное округление, например, для финансовых и налоговых вычислений.
Decimal64 поддерживает 16 десятичных цифр и мантиссы диапазон показателей от -383 до +384, т.е. ±0,000 000 000 000 000 × 10 −383 до ±9,999 999 999 999 999 × 10 384 . (Эквивалентно, ±0 000 000 000 000 000 × 10 −398 до ±9 999 999 999 999 999 × 10 369 .) Напротив, соответствующий двоичный формат, который является наиболее часто используемым типом, имеет приблизительный диапазон ±0,000 000 000 000 001 × 10 −308 до ±1,797 693 134 862 315 × 10 308 . Поскольку мантисса не нормализована, большинство значений с числом значащих цифр менее 16 имеют несколько возможных представлений; 1 × 10 2 = 0.1 × 10 3 = 0.01 × 10 4 и т. д. Ноль имеет 768 возможных представлений (1536, если оба знаковых нуля включены ).
Decimal64 с плавающей запятой — относительно новый формат десятичных чисел с плавающей запятой, официально представленный в версии 2008 года. [ 1 ] IEEE 754 , а также ISO/IEC/IEEE 60559:2011 . [ 2 ]
Представление десятичных значений64
[ редактировать ]Знак | Комбинация | Значимое и продолжение |
---|---|---|
1 бит | 13 бит | 50 бит |
с | мммммммммммм | cccccccccccccccccccccccccccccccccccccccccccccccccc |
IEEE 754 допускает два альтернативных метода представления десятичных значений64. Стандарт не определяет, как указать, какое представление используется, например, в ситуации, когда значения decimal64 передаются между системами:
- В методе двоичного представления 16-значная мантисса представляется как положительное целое число в двоичном коде, основанное на десятичном двоичном целом (BID).
- В методе десятичного представления 16-значная мантисса представляется как положительное целое число с десятичной кодировкой, основанное на плотно упакованной десятичной дроби (DPD) с 5 группами по 3 цифры (кроме самой старшей цифры, закодированной специально), каждая из которых представлена в десятичных числах (10 -битовые последовательности). Это довольно эффективно, потому что 2 10 = 1024, это лишь немногим больше, чем необходимо, чтобы содержать все числа от 0 до 999.
Обе альтернативы предоставляют одинаковый диапазон представимых чисел: 16 цифр мантиссы и 3 × 2. 8 = 768 возможных значений десятичной степени. (Все возможные значения десятичных показателей, хранящиеся в двоичном числе 64 , могут быть представлены в десятичном формате 64, и большинство битов мантиссы двоичного числа 64 сохраняются с примерно одинаковым количеством десятичных цифр в мантиссе.)
В обоих случаях старшие 4 бита мантиссы (которые на самом деле имеют только 10 возможных значений) объединяются со старшими 2 битами экспоненты (3 возможных значения), чтобы использовать 30 из 32 возможных значений 5-битного числа. поле. Остальные комбинации кодируют бесконечности и NaN .
Комбинированное поле | Экспонента | Значимое число Мбитов | Другой |
---|---|---|---|
00мммммммммм | 00xxxxxxxxx | 0cc | — |
01мммммммммм | 01хххххххх | 0cc | — |
10мммммммммммм | 10хххххххх | 0cc | — |
1100мммммммммм | 00xxxxxxxxx | 100с | — |
1101мммммммммм | 01хххххххх | 100с | — |
1110мммммммммм | 10хххххххх | 100с | — |
11110мммммммм | — | — | ±Infinity |
11111мммммммм | — | — | НаН . Знаковый бит игнорируется. Шестой бит поля комбинации определяет, передает ли сигнал NaN. |
В случаях Infinity и NaN все остальные биты кодировки игнорируются. Таким образом, можно инициализировать массив значениями Infinities или NaN, заполнив его однобайтовым значением.
Поле двоичного целочисленного значения
[ редактировать ]В этом формате используется двоичное значение от 0 до 10. 16 − 1 = 9 999 999 999 999 999 = 2386F26FC0FFFF 16 = 1000 1110000110 1111001001 1011111100 0000111111 1111111111 2 .
Кодировка, полностью хранящаяся в 64 битах, может представлять двоичные значения до 10 × 2. 50 − 1 = 11 258 999 068 426 239 = 27FFFFFFFFFFFF 16 , но значения больше 10 16 − 1 недопустимы (и стандарт требует, чтобы реализации обрабатывали их как 0, если они встречаются на входе).
Как описано выше, кодирование варьируется в зависимости от того, находятся ли старшие 4 бита мантиссы в диапазоне от 0 до 7 (от 0000 2 до 0111 2 ) или выше (1000 2 или 1001 2 ).
Если 2 после знакового бита равны «00», «01» или «10», то поле показателя степени состоит из 10 бит , следующих за знаковым битом, а мантисса — это оставшиеся 53 бита с неявным ведущим битом 0. :
s 00eeeeeeee (0)ttt tttttttttt tttttttttt tttttttttt tttttttttt tttttttttt s 01eeeeeeee (0)ttt tttttttttt tttttttttt tttttttttt tttttttttt tttttttttt s 10eeeeeeee (0)ttt tttttttttt tttttttttt tttttttttt tttttttttt tttttttttt
Сюда входят субнормальные числа , у которых старшая значащая цифра равна 0.
Если 2 бита после знакового бита равны «11», то 10-битное поле показателя степени сдвигается на 2 бита вправо (как после знакового бита, так и после бита «11»), а представленная мантисса находится в оставшейся части. 51 бит . В этом случае существует неявная (то есть не сохраненная) ведущая 3-битная последовательность «100» для большинства бит истинной мантиссы (в остальных младших битах ttt...ttt мантиссы не все возможные значения являются использовал).
s 1100eeeeeeee (100)t tttttttttt tttttttttt tttttttttt tttttttttt tttttttttt s 1101eeeeeeee (100)t tttttttttt tttttttttt tttttttttt tttttttttt tttttttttt s 1110eeeeeeee (100)t tttttttttt tttttttttt tttttttttt tttttttttt tttttttttt
имеется неявный 2-битная последовательность «11» после знакового бита указывает на то, что к мантиссе 3-битный префикс «100». Сравните наличие неявного 1-битного префикса «1» в мантиссе нормальных значений для двоичных форматов. Двухбитовые последовательности «00», «01» или «10» после знакового бита являются частью поля показателя степени.
Старшие биты поля мантиссы не кодируют старшую десятичную цифру; они просто являются частью большего чисто двоичного числа. Например, мантисса 8 000 000 000 000 000 кодируется как двоичная 0111 0001101011 1111010100 1001100011 0100000000 0000000000 2 с ведущими 4 битами , кодирующими 7; первая мантисса, для которой требуется 54-й бит, равна 2 53 = 9 007 199 254 740 992 . Самый высокий действительный значащий номер — 9 999 999 999 999 999 , двоичная кодировка которого равна (100)0 1110000110 1111001001 1011111100 0000111111 1111111111 2 (при этом 3 старших бита (100) не сохраняются, но неявно, как показано выше; а следующий бит всегда равен нулю в допустимых кодировках).
В приведенных выше случаях представленное значение равно
- (−1) знак × 10 показатель степени −398 × мантисса
Если четыре бита после знакового бита равны «1111», то значение равно бесконечности или NaN, как описано выше:
0 11110 xx...x +infinity 1 11110 xx...x -infinity x 11111 0x...x a quiet NaN x 11111 1x...x a signalling NaN
Плотно упакованное десятичное поле значащего значения
[ редактировать ]В этой версии мантисса хранится в виде последовательности десятичных цифр. Старшая цифра находится в диапазоне от 0 до 9 (3 или 4 двоичных бита), а остальная часть мантиссы использует плотно упакованную десятичную кодировку (DPD).
Два ведущих бита экспоненты и первая цифра (3 или 4 бита ) мантиссы объединяются в пять битов, следующих за знаковым битом.
Следующие восемь битов являются полем продолжения экспоненты, предоставляющим менее значащие биты экспоненты.
Последние 50 бит представляют собой поле продолжения мантиссы, состоящее из пяти 10-битных деклетов . [ 3 ] Каждый деклет кодирует три десятичные цифры. [ 3 ] с использованием кодировки DPD.
Если первые два бита после знакового бита равны «00», «01» или «10», то это старшие биты экспоненты, а три бита «TTT» после этого интерпретируются как первая десятичная цифра ( от 0 до 7):
s 00 TTT (00)eeeeeeee (0TTT)[tttttttttt][tttttttttt][tttttttttt][tttttttttt][tttttttttt] s 01 TTT (01)eeeeeeee (0TTT)[tttttttttt][tttttttttt][tttttttttt][tttttttttt][tttttttttt] s 10 TTT (10)eeeeeeee (0TTT)[tttttttttt][tttttttttt][tttttttttt][tttttttttt][tttttttttt]
Если первые два бита после знакового бита равны «11», то вторые 2 бита являются старшими битами показателя степени, а к следующему биту «T» добавляются неявные биты «100», образующие старшую десятичную цифру ( 8 или 9):
s 1100 T (00)eeeeeeee (100T)[tttttttttt][tttttttttt][tttttttttt][tttttttttt][tttttttttt] s 1101 T (01)eeeeeeee (100T)[tttttttttt][tttttttttt][tttttttttt][tttttttttt][tttttttttt] s 1110 T (10)eeeeeeee (100T)[tttttttttt][tttttttttt][tttttttttt][tttttttttt][tttttttttt]
Остальные две комбинации (11 110 и 11 111) 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 , Независимая от языка арифметика
- Примитивный тип данных
- Обозначение D (научное обозначение)
Ссылки
[ редактировать ]- ^ Компьютерное общество 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 г.