WikiDer > Формат Decimal64 с плавающей запятой
Плавающая точка форматы |
---|
IEEE 754 |
|
Другой |
В вычисление, десятичный64 это десятичная с плавающей запятой формат нумерации компьютеров занимающий 8 байтов (64 бита) в памяти компьютера. Он предназначен для приложений, в которых необходимо точно имитировать десятичное округление, таких как финансовые и налоговые вычисления.
Decimal64 поддерживает 16 десятичные цифры из значимое и показатель степени диапазон от -383 до +384, т. е. ±0.000000000000000×10 −383 к ±9.999999999999999×10 384. (Эквивалентно, ±0000000000000000×10 −398 к ±9999999999999999×10 369.) Напротив, соответствующий двоичный формат, который является наиболее часто используемым типом, имеет приблизительный диапазон ±0.000000000000001×10 −308 к ±1.797693134862315×10 308. Поскольку значение не нормализовано, большинство значений меньше 16 значащие цифры иметь несколько возможных представлений; 1 × 102=0.1 × 103=0.01 × 104и т. д. Zero имеет 768 возможных представлений (1536, если оба подписанные нули включены).
Decimal64 с плавающей запятой - это относительно новый десятичный формат с плавающей запятой, официально представленный в Версия 2008 г.[1] из IEEE 754 а также с ISO / IEC / IEEE 60559: 2011.[2]
Представление значений decimal64
Знак | Комбинация | Продолжение экспоненты | Коэффициент продолжения |
---|---|---|---|
1 бит | 5 бит | 8 бит | 50 бит |
s | ммммм | xxxxxxxx | cccccccccccccccccccccccccccccccccccccccccccccccccc |
IEEE 754 допускает два альтернативных метода представления значений decimal64. Стандарт не определяет, как обозначать, какое представление используется, например, в ситуации, когда значения decimal64 передаются между системами:
- в метод двоичного представления, 16-значное значащее значение представлено как положительное целое число, закодированное в двоичном коде, на основе двоичное целое десятичное (ДЕЛАТЬ СТАВКУ).
- в метод десятичного представления, 16-значное значение представлено как десятичное положительное целое число, основанное на плотно упакованная десятичная дробь (DPD) с 5 группами по 3 цифры (кроме специально закодированной старшей цифры), каждая представлена в деклетах (10-битных последовательностях). Это довольно эффективно, потому что 210 = 1024, это немного больше, чем необходимо, чтобы по-прежнему содержать все числа от 0 до 999.
Обе альтернативы обеспечивают точно такой же диапазон представимых чисел: 16 значащих цифр и 3 × 2.8 = 768 возможных значений десятичной экспоненты. (Все возможные значения десятичной экспоненты, сохраняемые в двоичный64 число может быть представлено в десятичном формате, и большинство битов мантиссы двоичного числа 64 хранятся, сохраняя примерно одинаковое количество десятичных цифр в мантиссе.)
В обоих случаях старшие 4 бита мантиссы (которые на самом деле имеют только 10 возможных значений) объединяются с 2 старшими битами экспоненты (3 возможных значения), чтобы использовать 30 из 32 возможных значений 5-битной поле. Остальные комбинации кодируют бесконечности и NaNs.
Комбинированное поле | Экспонента Msbits | Значимость Msbits | Другой |
---|---|---|---|
00ммм | 00 | 0xxx | — |
01ммм | 01 | 0xxx | — |
10ммм | 10 | 0xxx | — |
1100 кв.м. | 00 | 100x | — |
1101 кв.м. | 01 | 100x | — |
1110 кв.м. | 10 | 100x | — |
11110 | — | — | ± бесконечность |
11111 | — | — | NaN. Знаковый бит игнорируется. Первый бит поля продолжения экспоненты определяет, сигнализирует ли NaN. |
В случаях Infinity и NaN все остальные биты кодирования игнорируются. Таким образом, можно инициализировать массив бесконечностями или NaN, заполнив его однобайтовым значением.
Поле двоичного целочисленного значения
В этом формате используется двоичное значение от 0 до 10.16 − 1 = 9999999999999999 = 2386F26FC0FFFF16 = 1000111000011011110010011011111100000011111111111111112.
Кодирование, полностью сохраненное на 64 битах, может представлять двоичные значения до 10 × 2.50 − 1 = 11258999068426239 = 27FFFFFFFFFFFF16, но значения больше 1016 -1 являются недопустимыми (и стандарт требует, чтобы реализации обрабатывали их как 0, если они встречаются на входе).
Как описано выше, кодирование варьируется в зависимости от того, находятся ли наиболее значимые 4 бита значения в диапазоне от 0 до 7 (00002 к 01112) или выше (10002 или 10012).
Если 2 бита после знакового бита равны «00», «01» или «10», то поле экспоненты состоит из 10 бит, следующих за знаковым битом, а мантисса - это оставшиеся 53 бита с неявным начальным 0. кусочек:
s 00eeeeeeee (0) ttt tttttttttt tttttttttt tttttttttt tttttttttt tttttttttts 01eeeeeeee (0) ttt tttttttttt tttttttttt tttttttttt tttttttttt tttttttttts 10eeeeeeee (0) ttttttttttts 10eeeeeeee (0) ttttttttttts 10eeeeeeee (0) tttttttttttt
Это включает в себя субнормальные числа где первая цифра мантиссы равна 0.
Если 2 бита после знакового бита равны «11», то 10-битовое поле экспоненты сдвигается на 2 бита вправо (после как знакового бита, так и «11» битов после этого), и представленное значение находится в оставшейся 51 бит. В этом случае есть неявная (то есть не сохраненная) ведущая 3-битная последовательность "100" для большинства бит истинной значимости (в остальных младших битах ттт ... ттт значения, используются не все возможные значения).
s 1100eeeeeeee (100) t tttttttttt tttttttttt tttttttttt tttttttttt tttttttttts 1101eeeeeeee (100) t tttttttttt tttttttttt tttttttttt tttttttttt tttttttttts 1110eeeeeeee (100) tttttttttts 1110eeeeeeeeee (100) tttttttttts 1110eeeeeeeeee (100) tttttttttts 1110eeeeeeeeee (100) tttttttttt
2-битная последовательность "11" после знакового бита указывает, что существует скрытый 3-битный префикс "100" в мантиссе. Сравните наличие неявного 1-битного префикса «1» в значении нормальных значений для двоичных форматов. Двухбитовые последовательности «00», «01» или «10» после знакового бита являются частью поля экспоненты.
Старшие биты поля значащей нет закодировать самый старший десятичный разряд; они просто являются частью большего чисто двоичного числа. Например, значение 8000000000000000 кодируется как двоичный 0111000110101111110101001001100011010000000000000000002, с ведущими 4 битами, кодирующими 7; первая мантисса, требующая 54-го бита, равна 253 = 9007199254740992. Наивысшее допустимое значение 9999999999999999 чья двоичная кодировка(100)0111000011011110010011011111100000011111111111111112 (с 3 старшими битами (100) не сохранены, но неявно, как показано выше; и следующий бит всегда равен нулю в действительных кодировках).
В приведенных выше случаях представлено значение
- (−1)знак × 10показатель степени −398 × значимое
Если четыре бита после знакового бита равны «1111», тогда значение равно бесконечности или NaN, как описано выше:
s 11110 xx ... x ± бесконечность 11111 0x ... x тихий NaN 11111 1x ... x сигнальный NaN
Плотно упакованное десятичное значащее поле
В этой версии мантисса хранится в виде серии десятичных цифр. Первая цифра находится между 0 и 9 (3 или 4 двоичных бита), а остальная часть мантиссы использует плотно упакованная десятичная дробь (DPD) кодирование.
Первые 2 бита экспоненты и первая цифра (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] [tttttttttt] [tttttttttt] [tttttttttt] [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] [ttttttttt] [ttttttttttt] [ttttttttt] [ttttttttttt] [tttttttttt] [ttttttttttt] 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 состояния) | 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, Независимая от языка арифметика
- Примитивный тип данных
- Дек64
Рекомендации
- ^ 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.