stringtranslate.com

формат чисел с плавающей запятой decimal64

В вычислениях 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 с плавающей запятой — это относительно новый формат десятичных чисел с плавающей запятой, официально представленный в версии [1] IEEE 754 2008 года , а также в ISO/IEC/IEEE 60559:2011 . [2]


Представление десятичных значений64

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

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

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

с 00ееееееее (0)ттт ттттттттт ттттттттттттттттттттттттттттттттттттс 01ееееееее (0)ттт ттттттттт ттттттттттттттттттттттттттттттттттттс 10ееееееее (0)ттт ттттттттт тттттттттттттттттттттттттттттттттттт

Сюда входят субнормальные числа , у которых старшая значащая цифра равна 0.

Если2 бита после бита знака равны «11», затем 10-битное поле показателя степени сдвигается.2 бита вправо (после знакового бита и битов «11» после него), а представленное мантисса находится в оставшейся части.51 бит . В этом случае существует неявная (то есть не сохраненная) ведущая 3-битная последовательность «100» для большинства бит истинной мантиссы (в остальных младших битах ttt...ttt мантиссы не все возможные значения являются использовал).

с 1100ееееееее (100)т ттттттттт ттттттттттттттттттттттттттттттттттттс 1101ееееееее (100)т ттттттттт тттттттттттттттттттттттттттттттттттттс 1110ееееееее (100)т тттттттттттттттттттттттттттттттттттттттттттттт

2-битная последовательность «11» после знакового бита указывает на то, что к мантиссе имеется неявный 3-битный префикс «100». Сравните наличие неявного 1-битного префикса «1» в мантиссе нормальных значений для двоичных форматов. 2-битовые последовательности «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, как описано выше:

с 11110 xx...x ±бесконечностьs 11111 0x...xa тихий NaNs 11111 1x...xa сигнализация NaN

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

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

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

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

Последний50 бит — это поле продолжения мантиссы, состоящее из пяти 10-битных деклетов . [3] Каждый деклет кодирует три десятичные цифры [3] с использованием кодировки DPD.

Если первые два бита после знакового бита равны «00», «01» или «10», то это старшие биты экспоненты, а три бита «TTT» после этого интерпретируются как первая десятичная цифра ( от 0 до 7):

с 00 ТТТ (00)ееееееее (0ТТТ)[ттттттттт][ттттттттт][ттттттттт][ттттттттт][тттттттттт]с 01 ТТТ (01)ееееееее (0ТТТ)[ттттттттт][ттттттттт][ттттттттт][ттттттттт][тттттттттт]с 10 ТТТ (10)ееееееее (0ТТТ)[ттттттттт][ттттттттт][ттттттттт][ттттттттт][тттттттттт]

Если первые два бита после знакового бита равны «11», то вторые 2 бита являются старшими битами экспоненты, а к следующему биту «T» добавляются неявные биты «100», образующие старшую десятичную цифру ( 8 или 9):

с 1100 T (00)ееееееее (100T)[tttttttttt][ttttttttt][ttttttttt][tttttttttt][tttttttttt]с 1101 T (01)ееееееее (100T)[tttttttttt][tttttttttt][tttttttttt][tttttttttt][tttttttttt]с 1110 Т (10)ееееееее (100Т)[ттттттттт][ттттттттт][ттттттттт][ттттттттт][тттттттттт]

Остальные две комбинации (11 110 и 11 111) 5-битного поля после знакового бита используются для представления ±бесконечности и NaN соответственно.

Транскодирование DPD/3BCD для деклетов представлено в следующей таблице. b9...b0 — биты DPD, а d2…d0 — три цифры BCD.

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

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

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

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

  1. ^ Компьютерное общество IEEE (29 августа 2008 г.). Стандарт IEEE для арифметики с плавающей запятой. ИИЭЭ . doi :10.1109/IEESTD.2008.4610935. ISBN 978-0-7381-5753-5. Стандарт IEEE 754-2008 . Проверено 8 февраля 2016 г.
  2. ^ «ISO/IEC/IEEE 60559:2011». 2011 . Проверено 8 февраля 2016 г. {{cite journal}}: Требуется цитировать журнал |journal=( помощь )
  3. ^ аб Мюллер, Жан-Мишель; Бризебар, Николя; де Динешен, Флоран; Жаннерод, Клод-Пьер; Лефевр, Винсент; Мелькионд, Гийом; Револь, Натали ; Стеле, Дэмиен; Торрес, Серж (2010). Справочник по арифметике с плавающей запятой (1-е изд.). Биркхойзер . дои : 10.1007/978-0-8176-4705-6. ISBN 978-0-8176-4704-9. LCCN  2009939668.
  4. ^ Коулишоу, Майкл Фредерик (13 февраля 2007 г.) [03 октября 2000 г.]. «Краткое описание плотно упакованного десятичного кодирования». ИБМ . Архивировано из оригинала 24 сентября 2015 г. Проверено 7 февраля 2016 г.