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

редактировать

В вычислениях decimal128 является десятичное число с плавающей точкой формат компьютерной нумерации, занимающий 16 байтов (128 бит) в памяти компьютера. Он предназначен для приложений, в которых необходимо точно имитировать десятичное округление, например для финансовых и налоговых вычислений.

Decimal128 поддерживает 34 десятичных цифры из значимости и диапазон экспоненты от -6143 до +6144, то есть ± 0,000000000000000000000000000000000 × 10 ^ до ± 9.999999999999999999999999999999999 × 10 ^. (Эквивалентно от ± 0000000000000000000000000000000000 × 10 ^ до ± 9999999999999999999999999999999999 × 10 ^.) Следовательно, decimal128 имеет наибольший диапазон значений по сравнению с другими базовыми форматами с плавающей запятой IEEE. Поскольку значащая величина не нормализована, большинство значений с менее чем 34 значащими цифрами имеют несколько возможных представлений; 1 × 10 = 0,1 × 10 = 0,01 × 10 и т. Д. Ноль имеет 12288 возможных представлений (24576, если включены оба нулей со знаком ).

Decimal128 с плавающей запятой - это относительно новый десятичный формат с плавающей запятой, официально представленный в версии 2008 стандарта IEEE 754, а также в ISO / IEC. / IEEE 60559: 2011.

Содержание
  • 1 Представление десятичных значений 128
    • 1.1 Поле двоичного целочисленного значащего
    • 1.2 Плотно упакованное десятичное поле значащего
  • 2 См. Также
  • 3 Ссылки
Представление decimal128 значений
ЗнакКомбинацияЗнаки продолжения
1 бит17 бит110 бит
sммммммммммммммммcccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc

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

В одном методе представления, основанном на двоичном целочисленном десятичном (BID), мантисса представлена ​​как двоично-закодированное положительное целое число.

Другой, альтернативный, метод представления основан на плотно упакованной десятичной системе (DPD) для большей части значащей (кроме самой старшей цифры).

Обе альтернативы обеспечивают точно такой же диапазон представимых чисел: 34 значащих знака и 3 × 2 = 12288 возможных значений показателя степени.

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

Комбинированное полеЭкспонентаЗначимость и MsbitsДругое
00ммммммммммммммм00xxxxxxxxxxxx0ccc
01ммммммммммммм01xxxxxxxxxxxx0ccc
10ммммммммммммм10xxxxxxxxxxxx0ccc
1100ммммммммммм00xxxxxxxxxxxx100c
1101ммммммммммм01xxxxxxxxxxxx100c
1110ммммммммммммм10xxxxxxxxxxxx100c
11110мммммммммммм± Бесконечность
11111ммммммммммммNaN. Знаковый бит игнорируется. Шестой бит поля комбинации определяет, передает ли NaN сигнал.

В случае Infinity и NaN все остальные биты кодирования игнорируются. Таким образом, можно инициализировать массив бесконечностями или NaN, заполнив его однобайтовым значением.

Поле двоичного целочисленного значения

В этом формате используется двоичное значение от 0 до 10 - 1 = 99999999999999999999999999999999 = 1ED09BEAD87C0378D8E63FFFFFFFF 16 = 01111011011010000100000011010111111111111111111111111111111111111111111111111111111111111111 Кодирование может представлять двоичные значения до 10 × 2 - 1 = 12980742146337069071326240823050239, но значения больше 10 - 1 недопустимы (и стандарт требует, чтобы реализации обрабатывали их как 0, если они встречаются на входе).

Как описано выше, кодирование варьируется в зависимости от того, находятся ли самые старшие 4 бита мантиссы в диапазоне от 0 до 7 (от 0000 2 до 0111 2), или выше (1000 2 или 1001 2).

Если 2 бита после знакового бита равны "00", "01" или "10", то поле экспоненты состоит из 14 бит, следующих за знаковым битом, а мантисса - это оставшиеся 113 бит., с неявной ведущим 0 бит:

с 00eeeeeeeeeeee (0) ТТТ tttttttttt tttttttttt tttttttttt tttttttttt tttttttttt tttttttttt tttttttttt tttttttttt tttttttttt tttttttttt ttttttttttс 01eeeeeeeeeeee (0) ТТТ tttttttttt tttttttttt tttttttttt tttttttttt tttttttttt tttttttttt tttttttttt tttttttttt tttttttttt tttttttttt tttttttttts 10eeeeeeeeeeee (0) ttt tttttttttt tttttttttt tttttttttt tttttttttt tttttttttt tttttttttt tttttttttt tttttttttt tttttttttt tttttttttt tttttttttt tttttttttt tttttttttt tttttttttt tttttttttt tttttttttt tttttttttt

, где это число - это ведущее число <значимое <число

, где

- это <значимый>, где

- это <значимое>число <>, где это значение - <значение>4>Если 2 бита после знакового бита равны «11», то 14-битное поле экспоненты сдвигается на 2 бита вправо (после как знакового бита, так и «11» битов после этого), и представленное значение находится в оставшиеся 111 бит. В этом случае имеется неявная (то есть не сохраненная) ведущая 3-битная последовательность "100" в истинном значении.

с 1100eeeeeeeeeeee (100) т tttttttttt tttttttttt tttttttttt tttttttttt tttttttttt tttttttttt tttttttttt tttttttttt tttttttttt tttttttttt ttttttttttS 1101eeeeeeeeeeee (100) т tttttttttt tttttttttt tttttttttt tttttttttt tttttttttt tttttttttt tttttttttt tttttttttt tttttttttt tttttttttt tttttttttts 1110eeeeeeeeeeee (100) t tttttttttt tttttttttt tttttttttt tttttttttt tttttttttt tttttttttt tttttttttt tttttttttt tttttttttt tttttttttt tttttttttt tttttttttt tttttttttt tttttttttt

«11» 2-битная последовательность после знакового бита указывает на то, что «11» 2-битная последовательность после знакового бита указывает на то, что там неявно присутствует знаковый бит. Сравните наличие неявной 1 в значении нормальных значений для двоичных форматов. Биты «00», «01» или «10» являются частью поля экспоненты.

Для формата decimal128 все эти значения находятся за пределами допустимого диапазона (они начинаются с 2>1,038 × 10) и, таким образом, декодируются как ноль, но шаблон такой же, как decimal32 и decimal64.

В приведенных выше случаях представляемое значение равно

(−1) × 10 × значимое

Если четыре бита после знакового бита равны «1111», то значение является бесконечность или NaN, как описано выше:

s 11110 xx... x ± бесконечность s 11111 0x... xa тихий NaN s 11111 1x... xa, сигнализирующий о NaN

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

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

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

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

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

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

s 00 TTT (00) eeeeeeeeeeee (0TTT) [tttttttttt] [tttttttttt] [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] [tttttttttt] [tttttttttt] [tttttttttt] [tttttttttt] [tttttttttt] [tttttttttt]с 10 TTT (10) eeeeeeeeeeee (0TTT) [tttttttttt] [tttttttttt] [tttttttttt] [tttttttttt] [tttttttttt] [tttttttttt] [tttttttttt] [tttttttttt] [tttttttttt] [tttttttttt] [tttttttttt] [tttttttttt] [tttttttttt] [tttttttttt] tttttttttt]

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

s 1100 T (00) eeeeeeeeeeee (100T) [tttttttttt] [tttttttttt] [tttttttttt] [ttt ttttttt] [tttttttttt] [tttttttttt] [tttttttttt] [tttttttttt] [tttttttttt] [tttttttttt] [tttttttttt]s 1101 T (01) eeeeeeeeeeee (100T) [tttttttttt] [tttttttttt] [tttttttttt] [tttttttttt] [tttttttttt] [tttttttttt] [tttttttttt] ] [tttttttttt] [tttttttttt] [tttttttttt] [tttttttttt] [tttttttttt] [tttttttttt] [tttttttttt]s 1110 T (10) eeeeeeeeeeee (100T) [ttttttttttt] [tttttttt] [ttttttttt] [ttttttttt] [ttttttttt] [tttttttttt] [tttttttttt] [tttttttttt] [tttttttttt] [tttttttttt] [tttttttttt] [tttttttttt]

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

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

Правила десятичного кодирования с плотной упаковкой
DPD-кодированное значениеДесятичные цифры
Кодовое пространство (1024 состояния)b9b8b7b6b5b4b3b2b1b0d2d1d0Кодированные значенияОписаниеВхождения (1000 состояний)
50,0% (512 состояний)abcdef0ghi0abc0def0ghi(0–7) (0–7) (0–7)Три маленькие цифры51,2% (512 состояний)
37,5% (384 состояния)abcdef100i0abc0def100 i(0–7) (0–7) (8–9)Две маленькие цифры,. одна большая38,4% (384 состояния)
abcghf101i0abc100 f0ghi(0–7) (8–9) (0–7)
ghcdef110i100 c0def0ghi(8–9) (0–7) (0– 7)
9,375% (96 состояний)ghc00f111i100 c100 f0ghi(8–9) (8–9) (0–7)Одна маленькая цифра,. два больших9,6% (96 состояний)
dec01f111i100 c0def100 i(8–9) (0–7) (8–9)
abc10f111i0abc100 f100 i(0–7) (8–9) (8–9)
3,125% (32 состояния, 8 использовано)xxc11f111i100 c100 f100 i(8–9) (8–9) (8–9)Три большие цифры, биты b9 и b8 равны безразлично 0,8% (8 состояний)

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

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

(- 1) бит знака × 10 битов степени 2 - 6176 10 × истинное значение 10 {\ displaystyle (-1) ^ {\ text {signbit}} \ times 10 ^ {{\ text {exponentbits}} _ {2 } -6176_ {10}} \ times {\ text {truesignificand}} _ {10}}(-1) ^ {{\ text {signbit}}} \ times 10 ^ {{ {\ text {exponentbits}} _ {2} -6176 _ {{10}}}} \ times {\ text {truesignificand}} _ {{10}}
См. Также
Ссылки
Последняя правка сделана 2021-05-17 10:48:43
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте