Форматы с плавающей запятой |
---|
IEEE 754 |
|
Другой |
Стандарт IEEE 754-2008 включает форматы десятичных чисел с плавающей запятой, в которых значение и показатель степени (и полезные данные NaN ) могут быть закодированы двумя способами, называемыми двоичным кодированием и десятичным кодированием . [1]
Оба формата разбивают число на знаковый бит s , показатель степени q (между q min и q max ) и p -значное значение c (между 0 и 10 p -1). Закодированное значение равно (-1) s × 10 q × c . В обоих форматах диапазон возможных значений идентичен, но они различаются способом представления мантиссы c . В десятичном кодировании он кодируется как серия из p десятичных цифр (с использованием плотно упакованного десятичного числа).(DPD) кодирование). Это делает преобразование в десятичную форму эффективным, но требует для обработки специального десятичного ALU . В кодировке двоичного целого десятичного числа ( BID ) он кодируется как двоичное число.
Форматировать [ редактировать ]
Используя тот факт, что 2 10 = 1024 лишь немного больше, чем 10 3 = 1000, 3 n- значных десятичных числа могут быть эффективно упакованы в 10 n двоичных разрядов. Однако форматы IEEE имеют значения из 3 n +1 цифр, для представления которых обычно требуется 10 n +4 двоичных разряда.
Это было бы неэффективно, потому что необходимы только 10 из 16 возможных значений дополнительных 4 бит. Более эффективное кодирование может быть разработано с использованием того факта, что диапазон экспоненты имеет форму 3 × 2 k , поэтому показатель степени никогда не начинается с 11
. Используя кодировку Decimal32 (с мантиссой из 3 * 2 + 1 десятичных цифр) в качестве примера ( e
обозначает экспоненту, m
мантиссу, то есть мантиссу):
- Если мантисса начинается с
0mmm
, пропуск ведущего 0 бита позволяет мантиссе уместиться в 23 бита:
s 00eeeeee (0) ммм мммммммммм ммммммммммs 01eeeeee (0) ммм мммммммммм ммммммммммs 10eeeeee (0) ммм мммммммммм мммммммммм
- Если мантисса начинается с
100m
, опускание первых 100 битов позволяет мантиссе уместиться в 21 бит. Показатель сдвинут на 2 бита, и11
пара битов показывает, что используется эта форма:
s 1100eeeeee (100) м мммммммммм ммммммммммs 1101eeeeee (100) м мммммммммм ммммммммммs 1110eeeeee (100) м мммммммммм мммммммммм
- Бесконечность, тихий NaN и сигнальный NaN используют кодировки, начинающиеся с
s 1111
:
s 11110 хххххххххххххххххххххххs 111110 xxxxxxxxxxxxxxxxxxxxxxxxxs 111111 xxxxxxxxxxxxxxxxxxxxxxxxx
Биты, показанные в круглых скобках, неявны : они не включены в 32 бита кодировки Decimal32, но подразумеваются двумя битами после знакового бита.
Кодировки Decimal64 и Decimal128 имеют большие поля экспоненты и значения, но работают аналогичным образом.
Для кодирования Decimal128 113 бит значимости на самом деле достаточно для кодирования 34 десятичных цифр, а вторая форма на самом деле никогда не требуется.
Когорта [ править ]
Десятичное число с плавающей запятой может быть закодировано несколькими способами, разные способы представляют разную точность, например, 100.0 кодируется как 1000 × 10 -1 , а 100.00 кодируется как 10000 × 10 -2 . Набор возможных кодировок одного и того же числового значения в стандарте называется когортой . Если результат вычисления неточен, наибольший объем значимых данных сохраняется путем выбора члена когорты с наибольшим целым числом, которое может быть сохранено в мантиссе вместе с требуемой экспонентой.
Диапазон [ править ]
Предлагаемый стандарт IEEE 754r ограничивает диапазон чисел мантиссой формы 10 n -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]
См. Также [ править ]
- IEEE 754
Ссылки [ править ]
- ^ "ПРОЕКТ стандарта для арифметики с плавающей запятой P754" (PDF) . 2006-10-04 . Проверено 1 июля 2007 .[ постоянная мертвая ссылка ]
- ^ http://speleotrove.com/decimal/decperf.html
Дальнейшее чтение [ править ]
- Савард, Джон Дж. Г. (2018) [2007]. «Стандарт десятичных чисел с плавающей запятой» . квадиблок . Архивировано 3 июля 2018 года . Проверено 16 июля 2018 .