Двоичное целое десятичное число - Binary integer decimal
Плавающая точка форматы |
---|
IEEE 754 |
|
Другой |
В IEEE 754-2008 стандарт включает форматы десятичных чисел с плавающей запятой, в которых значимое и показатель степени (и полезные нагрузки NaNs ) можно закодировать двумя способами, называемыми двоичное кодирование и десятичное кодирование.[1]
Оба формата разбивают число на знаковый бит s, показатель степени q (между qмин и qМаксимум), а п-цифровое значение c (от 0 до 10п−1). Закодированное значение (-1)s×10q×c. В обоих форматах диапазон возможных значений идентичен, но они различаются величиной c представлен. В десятичном кодировании он кодируется как серия п десятичные цифры (используя плотно упакованная десятичная дробь (DPD) кодирование). Это делает преобразование в десятичную форму эффективным, но требует специального десятичного ALU обрабатывать. в двоичное целое десятичное (ДЕЛАТЬ СТАВКУ), он кодируется как двоичное число.
Формат
Используя тот факт, что 210 = 1024 лишь немногим больше 103 = 1000, 3п-значные десятичные числа могут быть эффективно упакованы в 10п двоичные биты. Однако форматы IEEE имеют значение 3п+1 цифра, для которой обычно требуется 10п+4 двоичных бита для представления.
Это было бы неэффективно, потому что необходимы только 10 из 16 возможных значений дополнительных 4 бит. Более эффективное кодирование может быть разработано с использованием того факта, что диапазон экспоненты имеет форму 3 × 2.k, поэтому показатель никогда не начинается с 11
. Используя кодировку Decimal32 (с мантиссой 3 * 2 + 1 десятичных цифр) в качестве примера (е
обозначает показатель степени, м
для мантиссы, т.е. значимости):
- Если мантисса начинается с
0ммм
, опуская ведущий 0 бит, мантисса умещается в 23 бита:
s 00eeeeee (0) ммм мммммммммм ммммммммммм 01eeeeee (0) ммм мммммммммм ммммммммммс 10eeeeee (0) ммм мммммммммм мммммммммм
- Если мантисса начинается с
100м
Если исключить первые 100 битов, то мантисса уместится в 21 бит. Показатель сдвинут на 2 бита, а11
битовая пара показывает, что используется эта форма:
s 1100eeeeee (100) m mmmmmmmmmm mmmmmmmmmms 1101eeeeee (100) m mmmmmmmmmm mmmmmmmmmms 1110eeeeee (100) m мммммммммм мммммммммм
- Бесконечность, тихо NaN и сигнализация NaN использует кодировки, начинающиеся с
с 1111
:
s 11110 xxxxxxxxxxxxxxxxxxxxxxxxxxs 111110 xxxxxxxxxxxxxxxxxxxxxxxxs 111111 xxxxxxxxxxxxxxxxxxxxxxx
Биты, указанные в скобках, являются скрытый: они не включены в 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 |
Стандартный emax | 96 | 384 | 6144 |
Стандартный emin | −95 | −383 | −6143 |
Спектакль
Двоичное кодирование по своей природе менее эффективно для преобразований в или из данных, закодированных в десятичном формате, таких как строки (ASCII, Unicode и т. д.) и BCD. Поэтому двоичное кодирование лучше всего выбирать только тогда, когда данные являются двоичными, а не десятичными. IBM опубликовала непроверенные данные о производительности.[2]
Смотрите также
Рекомендации
- ^ «ПРОЕКТ стандарта для арифметики с плавающей запятой P754» (PDF). 2006-10-04. Получено 2007-07-01.[постоянная мертвая ссылка ]
- ^ http://speleotrove.com/decimal/decperf.html
дальнейшее чтение
- Савард, Джон Дж. Г. (2018) [2007]. «Стандарт десятичных чисел с плавающей запятой». квадиблок. В архиве из оригинала 2018-07-03. Получено 2018-07-16.