Шестнадцатеричное число с плавающей запятой IBM - IBM hexadecimal floating-point

Шестнадцатеричный с плавающей точкой (теперь называется ГФП от IBM ) представляет собой формат для кодирования чиселплавающей запятой впервые введена на IBM System / 360 компьютеров, и поддерживается на последующих машинахоснове этой архитектуры, а также машиныкоторые были предназначенычтобы быть APPLICATION- совместим с System / 360.

По сравнению с плавающей запятой IEEE 754 , формат HFP имеет более длинное значение и более короткий показатель степени . Все форматы HFP имеют 7 бит экспоненты со смещением 64. Нормализованный диапазон представимых чисел составляет от 16 -65 до 16 63 (приблизительно от 5,39761 × 10 -79 до 7,237005 × 10 75 ).

Число представлено следующей формулой: (-1) знак × 0. Мантисса × 16 экспонента-64 .

32-битная одинарная точность

Номер HFP с одинарной точностью (называемый IBM "коротким") хранится в 32-битном слове:

1 7 24 (ширина в битах)
S Опыт Дробная часть  
31 год 30 ... 24 23 ... 0 (битовый индекс) *
* В документации IBM биты нумеруются слева направо, так что самый старший бит обозначается как бит с номером 0.

В этом формате начальный бит не подавляется, а точка счисления (шестнадцатеричная) устанавливается слева от мантиссы (дробь в документации IBM и на рисунках).

Поскольку основание равно 16, показатель степени в этой форме примерно в два раза больше, чем эквивалент в IEEE 754, для того, чтобы иметь аналогичный диапазон экспоненты в двоичном формате, потребовалось бы 9 битов показателя.

Пример

Рассмотрите возможность кодирования значения -118,625 как значения HFP с плавающей запятой одинарной точности.

Значение отрицательное, поэтому бит знака равен 1.

Значение 118,625 10 в двоичном формате равно 1110110,101 2 . Это значение нормализуется перемещением точки счисления влево на четыре бита (одна шестнадцатеричная цифра) за раз до тех пор, пока крайняя левая цифра не станет нулем, что дает 0,01110110101 2 . Остальные крайние правые цифры дополняются нулями, что дает 24-битную дробь 0,0111 0110 1010 0000 0000 0000 2 .

Нормализованное значение сдвинуло точку счисления на две шестнадцатеричные цифры влево, в результате чего множитель и показатель степени равны 16 +2 . Смещение +64 добавляется к показателю степени (+2), в результате получается +66, что составляет 100 0010 2 .

Комбинируя знак, показатель степени плюс смещение и нормализованную дробь, получается такая кодировка:

S Опыт Дробная часть  
1 100 0010 0111 0110 1010 0000 0000 0000  

Другими словами, число , представленное в -0.76A000 16 × 16 66 - 64 = -0,4633789 ... × 16 + 2 = -118,625

Наибольшее представимое число

S Опыт Дробная часть  
0 111 1111 1111 1111 1111 1111 1111 1111  

Представленное число равно + 0.FFFFFF 16 × 16 127 - 64 = (1 - 16 −6 ) × 16 63 ≈ +7,2370051 × 10 75.

Наименьшее положительное нормализованное число

S Опыт Дробная часть  
0 000 0000 0001 0000 0000 0000 0000 0000  

Представленное число равно +0,1 16 × 16 0 - 64 = 16 −1 × 16 −64 ≈ +5,397605 × 10 −79 .

Нуль

S Опыт Дробная часть  
0 000 0000 0000 0000 0000 0000 0000 0000  

Ноль (0,0) представлен в нормализованной форме как все нулевые биты, что арифметически представляет собой значение +0,0 16 × 16 0 - 64 = +0 × 16 −64 ≈ +0,000000 × 10 −79 = 0. Учитывая долю всех- нулевые биты, любая комбинация бита с положительным или отрицательным знаком и ненулевой смещенной экспоненты даст значение, арифметически равное нулю. Однако нормализованная форма, сгенерированная для нуля аппаратным обеспечением ЦП, является нулевым по всем битам. Это верно для всех трех форматов точности с плавающей запятой. Сложение или вычитание с другими значениями экспоненты может привести к потере точности результата.

Проблемы с точностью

Поскольку основание равно 16, в двоичном значении может быть до трех ведущих нулевых битов. Это означает, что при преобразовании числа в двоичное число может быть всего 21 бит точности. Из-за эффекта "точности колебания" это может привести к очень неточным расчетам. Это вызвало серьезную критику.

Хорошим примером неточности является представление десятичного значения 0,1. У него нет точного двоичного или шестнадцатеричного представления. В шестнадцатеричном формате он представлен как 0,19999999 ... 16 или 0,0001 1001 1001 1001 1001 1001 1001 ... 2 , то есть:

S Опыт Дробная часть  
0 100 0000 0001 1001 1001 1001 1001 1010  

У него всего 21 бит, тогда как двоичная версия имеет точность 24 бита.

Шесть шестнадцатеричных цифр точности примерно эквивалентны шести десятичным цифрам (т. Е. (6 - 1) log 10 (16) ≈ 6,02). Для преобразования шестнадцатеричного числа с плавающей запятой одинарной точности в десятичную строку потребуется как минимум 9 значащих цифр (т.е. 6 log 10 (16) + 1 ≈ 8,22), чтобы преобразовать обратно в то же шестнадцатеричное значение с плавающей запятой.

64-битная двойная точность

Формат HFP с двойной точностью (называемый IBM «длинным») аналогичен «короткому» формату, за исключением того, что поле дроби шире, а число с двойной точностью хранится в двойном слове (8 байтов):

1 7 56 (ширина в битах)
S Опыт Дробная часть  
63 62 ... 56 55 ... 0 (битовый индекс) *
* В документации IBM биты нумеруются слева направо, так что самый старший бит обозначается как бит с номером 0.

Показатель степени для этого формата покрывает только около четверти диапазона соответствующего двоичного формата IEEE.

14 шестнадцатеричных цифр точности примерно эквивалентны 17 десятичным цифрам. Для преобразования шестнадцатеричного числа с плавающей запятой двойной точности в десятичную строку потребуется не менее 18 значащих цифр, чтобы преобразовать обратно в то же шестнадцатеричное значение с плавающей запятой.

128 бит повышенной точности

Формат HFP с четырехкратной точностью, получивший название от IBM, был добавлен в серию System / 370 и был доступен на некоторых моделях S / 360 (S / 360-85, -195 и других по специальному запросу или моделировался программным обеспечением ОС. ). Поле дроби с повышенной точностью шире, а число с повышенной точностью хранится в виде двух двойных слов (16 байтов):

Часть высокого порядка
1 7 56 (ширина в битах)
S Опыт Дробь (старшие 14 цифр)  
127 126 ... 120 119 ... 64 (битовый индекс) *
Младшая часть
8 56 (ширина в битах)
Неиспользованный Дробь (младшие 14 цифр)  
63 ... 56 55 ... 0 (битовый индекс) *
* В документации IBM биты нумеруются слева направо, так что самый старший бит обозначается как бит с номером 0.

28 шестнадцатеричных цифр точности примерно эквивалентны 32 десятичным цифрам. Для преобразования HFP с расширенной точностью в десятичную строку потребуется не менее 35 значащих цифр, чтобы преобразовать обратно в то же значение HFP. Сохраненный показатель степени в младшей части на 14 меньше, чем в старшей части, если только она не будет меньше нуля.

Арифметические операции

Доступные арифметические операции - это сложение и вычитание, нормализованное и ненормализованное, а также сравнение. Пренормировка выполняется на основе разности экспонент. Умножение и деление предварительно нормализует ненормализованные значения и усекает результат после одной защитной цифры. Есть операция деления пополам, чтобы упростить деление на два. Начиная с ESA / 390, есть операция извлечения квадратного корня. Все операции имеют одну шестнадцатеричную защитную цифру, чтобы избежать потери точности. Большинство арифметических операций обрезаются, как в простых карманных калькуляторах. Следовательно, 1 - 16 −8 = 1. В этом случае результат округляется от нуля.

IEEE 754 на мэйнфреймах IBM

Начиная с S / 390 G5 в 1998 году, мэйнфреймы IBM также включают двоичные модули с плавающей запятой IEEE, которые соответствуют стандарту IEEE 754 для арифметики с плавающей запятой . Десятичное число с плавающей запятой IEEE было добавлено в IBM System z9 GA2 в 2007 году с использованием милликода, а в 2008 году - в IBM System z10 на аппаратном уровне.

Современные мэйнфреймы IBM поддерживают три системы счисления с плавающей запятой с тремя шестнадцатеричными (HFP) форматами, тремя двоичными (BFP) форматами и тремя десятичными (DFP) форматами. На ядро ​​приходится два модуля с плавающей запятой; один с поддержкой HFP и BFP и один с поддержкой DFP; есть один регистровый файл, FPR, который содержит все 3 формата. Начиная с z13 в 2015 году, процессоры добавили векторную функцию, которая включает 32 векторных регистра, каждый из которых имеет ширину 128 бит; векторный регистр может содержать два 64-битных или четыре 32-битных числа с плавающей запятой. Традиционные 16 регистров с плавающей запятой накладываются на новые векторные регистры, поэтому некоторыми данными можно управлять с помощью традиционных инструкций с плавающей запятой или с помощью новых векторных инструкций.

Специальное использование

Формат IBM HFP используется в:

Поскольку IBM является единственным оставшимся поставщиком оборудования, использующего формат HFP, и поскольку единственными машинами IBM, поддерживающими этот формат, являются их мэйнфреймы, это требуется для немногих форматов файлов. Единственное исключение - это формат файла SAS 5 Transport, который требует FDA; в этом формате: «Все числа с плавающей запятой в файле хранятся с использованием представления мэйнфрейма IBM. [...] Большинство платформ используют представление IEEE для чисел с плавающей запятой. [...] Чтобы помочь вам в чтении и / или написания транспортных файлов, мы предоставляем процедуры для преобразования из представления IEEE (либо с прямым порядком, либо с прямым порядком байтов) в транспортное представление и обратно ». Код формата IBM также доступен под LGPLv2.1 .

Системы, использующие формат с плавающей запятой IBM

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

использованная литература

дальнейшее чтение