десятичный64 формат с плавающей запятой - decimal64 floating-point format

В вычислениях , 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 по стандарту IEEE 754 , а также с ISO / IEC / IEEE 60559: 2011 .

Представление значений decimal64

Знак Комбинация Продолжение экспоненты Значимое и продолжение
1 бит 5 бит 8 бит 50 бит
s ммммм xxxxxxxx cccccccccccccccccccccccccccccccccccccccccccccccccc

IEEE 754 допускает два альтернативных метода представления значений decimal64. Стандарт не определяет, как обозначать, какое представление используется, например, в ситуации, когда значения decimal64 передаются между системами:

Обе альтернативы обеспечивают точно такой же диапазон представимых чисел: 16 значащих цифр и 3 × 2 8  = 768 возможных значений десятичной экспоненты. (Все возможные значения десятичной экспоненты, хранимые в числе binary64, могут быть представлены в decimal64, а большинство битов мантиссы binary64 хранятся, сохраняя примерно одинаковое количество десятичных цифр в значении.)

В обоих случаях старшие 4 бита мантиссы (которые на самом деле имеют только 10 возможных значений) объединяются с 2 старшими битами экспоненты (3 возможных значения), чтобы использовать 30 из 32 возможных значений 5-битной поле. Остальные комбинации кодируют бесконечности и NaN .

Комбинированное поле Экспонента 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 = 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, как описано выше:

s 11110 xx...x    ±infinity
s 11111 0x...x    a quiet NaN
s 11111 1x...x    a signalling NaN

Плотно упакованное десятичное значащее поле

В этой версии мантисса хранится как последовательность десятичных цифр. Первая цифра находится между 0 и 9 (3 или 4 двоичных разряда), а остальная часть мантиссы использует плотно упакованное десятичное (DPD) кодирование.

Первые 2 бита экспоненты и первая цифра (3 или 4 бита) мантиссы объединяются в пять битов, следующих за битом знака.

Эти восемь битов после этого являются полем продолжения экспоненты, обеспечивающим менее значимые биты экспоненты.

Последние 50 битов являются полем продолжения значения, состоящим из пяти 10-битных деклетов . Каждый деклет кодирует три десятичных цифры с использованием кодировки 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 состояния) b9 b8 b7 b6 b5 b4 b3 Би 2 b1 b0 d2 d1 d0 Закодированные значения Описание Вхождения (1000 состояний)
50,0% (512 штатов) а б c d е ж 0 грамм час я 0 abc 0 def 0 гхи (0–7) (0–7) (0–7) Три маленькие цифры 51,2% (512 штатов)
37,5% (384 государства) а б c d е ж 1 0 0 я 0 abc 0 def 100 я (0–7) (0–7) (8–9) Две маленькие цифры,
одна большая
38,4% (384 государства)
а б c грамм час ж 1 0 1 я 0 abc 100 f 0 гхи (0–7) (8–9) (0–7)
грамм час c d е ж 1 1 0 я 100 с 0 def 0 гхи (8–9) (0–7) (0–7)
9,375% (96 штатов) грамм час c 0 0 ж 1 1 1 я 100 с 100 f 0 гхи (8–9) (8–9) (0–7) Одна маленькая цифра,
две большие
9,6% (96 штатов)
d е c 0 1 ж 1 1 1 я 100 с 0 def 100 я (8–9) (0–7) (8–9)
а б c 1 0 ж 1 1 1 я 0 abc 100 f 100 я (0–7) (8–9) (8–9)
3,125% (32 штата, 8 использовано) Икс Икс c 1 1 ж 1 1 1 я 100 с 100 f 100 я (8–9) (8–9) (8–9) Три большие цифры, биты b9 и b8 являются не забочусь 0,8% (8 штатов)

8 десятичных значений, все цифры которых равны 8 или 9, имеют четыре кодировки каждое. Биты, отмеченные x в приведенной выше таблице, игнорируются при вводе, но всегда будут равны 0 в вычисленных результатах. (8 × 3 = 24 нестандартных кодирования заполняют пробел между 10 3  = 1000 и 2 10  = 1024.)

В приведенных выше случаях, когда истинное значение представляет собой последовательность декодированных десятичных цифр, представленное значение равно

Смотрите также

Рекомендации