Двоичное целое десятичное число
с плавающей запятой Форматы |
---|
ИЭЭЭ 754 |
|
Другой |
Альтернативы |
Стандарт IEEE 754-2008 включает форматы десятичных чисел с плавающей запятой, в которых мантисса и показатель степени (а также полезные данные NaN ) могут быть закодированы двумя способами, называемыми двоичным кодированием и десятичным кодированием . [1]
Оба формата разбивают число на знаковый бит s , показатель степени q (между q min и q max ) и p -значную цифру c (между 0 и 10). п −1). Закодированное значение: (-1) с ×10 д × с . В обоих форматах диапазон возможных значений идентичен, но они различаются способом мантиссы c представления . В десятичной кодировке он кодируется как серия p десятичных цифр (с использованием плотноупакованной десятичной кодировки (DPD)). требуется специализированное десятичное ALU Это делает преобразование в десятичную форму эффективным, но для обработки . В кодировке двоичного целочисленного числа ( BID ) оно кодируется как двоичное число.
Формат
[ редактировать ]Используя тот факт, что 2 10 = 1024 лишь немногим больше 10 3 = 1000, 3 n -значных десятичных чисел можно эффективно упаковать в 10 n двоичных битов. Однако форматы IEEE имеют мантиссы из 3 n +1 цифр, для представления которых обычно требуется 10 n +4 двоичных бита.
Это было бы неэффективно, поскольку необходимы только 10 из 16 возможных значений дополнительных четырех битов. Более эффективное кодирование можно разработать, используя тот факт, что диапазон экспоненты имеет форму 3×2. к , поэтому показатель степени никогда не начинается с 11
. Используя кодировку Decimal32 (с мантиссой из 3*2+1 десятичных цифр) в качестве примера ( e
означает показатель степени, m
для мантиссы, т.е. мантиссы):
- Если мантисса начинается с
0mmm
, опуская начальный нулевой бит, мантисса помещается в 23 бита:
s 00eeeeee (0)mmm mmmmmmmmmm mmmmmmmmmm s 01eeeeee (0)mmm mmmmmmmmmm mmmmmmmmmm s 10eeeeee (0)mmm mmmmmmmmmm mmmmmmmmmm
- Если мантисса начинается с
100m
, опуская первые 100 бит, мантисса помещается в 21 бит. Экспонента сдвигается на 2 бита, а11
битовая пара показывает, что используется эта форма:
s 1100eeeeee (100)m mmmmmmmmmm mmmmmmmmmm s 1101eeeeee (100)m mmmmmmmmmm mmmmmmmmmm s 1110eeeeee (100)m mmmmmmmmmm mmmmmmmmmm
- Бесконечный, тихий NaN и сигнальный NaN используют кодировки, начинающиеся с
s 1111
:
s 11110 xxxxxxxxxxxxxxxxxxxxxxxxxx s 111110 xxxxxxxxxxxxxxxxxxxxxxxxx s 111111 xxxxxxxxxxxxxxxxxxxxxxxxx
Биты, показанные в скобках, являются неявными : они не включены в 32 бита кодировки Decimal32, но подразумеваются двумя битами после знакового бита.
Кодировки Decimal64 и Decimal128 имеют поля экспоненты и мантиссы большего размера, но работают аналогичным образом.
Для кодировки Decimal128 113 бит мантиссы на самом деле достаточно для кодирования 34 десятичных цифр, и вторая форма фактически никогда не требуется.
когорта
[ редактировать ]Десятичное число с плавающей запятой можно закодировать несколькими способами, разные способы представляют разную точность, например 100,0 кодируется как 1000×10. −1 , а 100,00 кодируется как 10000×10 −2 . Набор возможных кодировок одного и того же числового значения называется когортой в стандарте . Если результат расчета неточен, наибольший объем значимых данных сохраняется путем выбора члена когорты с наибольшим целым числом, которое может быть сохранено в мантиссе вместе с требуемым показателем степени.
Диапазон
[ редактировать ]Предлагаемый стандарт IEEE 754r ограничивает диапазон чисел мантиссой вида 10. н −1, где n — количество целых десятичных цифр, которые можно сохранить в доступных битах, чтобы десятичное округление выполнялось правильно.
32 бит | 64 бит | 128 бит | |
---|---|---|---|
Биты хранения | 32 | 64 | 128 |
Замыкающие значащие биты | 20 | 50 | 110 |
Значимые биты | 23/24 | 53/54 | 113 |
Значимые цифры | 7 | 16 | 34 |
Комбинированные биты | 11 | 13 | 17 |
Биты экспоненты | 8 | 10 | 14 |
Предвзятость | 101 | 398 | 6176 |
Стандартный эмакс | 96 | 384 | 6144 |
Стандартный конечно | −95 | −383 | −6143 |
Производительность
[ редактировать ]Двоичное кодирование по своей сути менее эффективно для преобразований в или из данных в десятичной кодировке, таких как строки ( ASCII , Unicode и т. д.) и BCD . Поэтому двоичную кодировку лучше всего выбирать только в том случае, если данные являются двоичными, а не десятичными. IBM опубликовала некоторые непроверенные данные о производительности. [2]
См. также
[ редактировать ]Ссылки
[ редактировать ]- ^ «ПРОЕКТ стандарта арифметики с плавающей запятой P754» (PDF) . 04.10.2006 . Проверено 1 июля 2007 г. [ постоянная мертвая ссылка ]
- ^ «Производительность десятичной библиотеки — 1.01» .
Дальнейшее чтение
[ редактировать ]- Савард, Джон Дж. Г. (2018) [2007]. «Стандарт десятичных чисел с плавающей запятой» . четырехблок . Архивировано из оригинала 3 июля 2018 г. Проверено 16 июля 2018 г.