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

Шестнадцатеричный плавающая точка (теперь называется HFP к IBM) - это формат для кодирования чисел с плавающей запятой, впервые представленный на IBM Система / 360 компьютеры и поддерживаются на последующих машинах на основе этой архитектуры,[1][2][3] а также машины, которые должны были быть совместимы с приложениями с System / 360.[4][5]

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

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

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

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

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

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

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

Пример

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

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

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

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

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

SОпытДробная часть 
1100 00100111 0110 1010 0000 0000 0000 

Другими словами, представленное число равно -0,76A000.16 × 1666 − 64 = −0.4633789… × 16+2 = −118.625

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

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

Представленное число + 0.FFFFFF16 × 16127 − 64 = (1 − 16−6) × 1663 ≈ +7.2370051 × 1075

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

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

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

Нуль

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

Ноль (0,0) представлен в нормализованной форме как все нулевые биты, что арифметически является значением +0,0.16 × 160 − 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ОпытДробная часть 
0100 00000001 1001 1001 1001 1001 1010 

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

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

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

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

1756(ширина в битах)
SОпытДробная часть 
6362...5655...0(битовый индекс)*
* В документации IBM биты нумеруются слева направо, поэтому самый старший бит обозначается как бит с номером 0.

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

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

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

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

Часть высокого порядка
1756(ширина в битах)
SОпытДробь (старшие 14 цифр) 
127126...120119...64(битовый индекс)*
Младшая часть
856(ширина в битах)
НеиспользованныйДробь (младшие 14 цифр) 
63...5655...0(битовый индекс)*
* В документации IBM биты нумеруются слева направо, поэтому самый старший бит обозначается как бит с номером 0.

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

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

Большинство арифметических операций обрезаются, как простые карманные калькуляторы. Следовательно, 1 - 16−7 = 1. В этом случае результат округляется от нуля.[6]

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

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

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

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

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

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

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

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

Рекомендации

  1. ^ Принципы работы IBM System / 360, Публикация IBM A22-6821-6, седьмое издание (13 января 1967 г.), стр.41-50
  2. ^ IBM System / 370 Принципы работы, Публикация IBM GA22-7000-4, пятое издание (1 сентября 1975 г.), стр. 157-170.
  3. ^ z / Архитектура Принципы работы, Публикация IBM SA22-7832-01, второе издание (октябрь 2001 г.), глава 9 и далее.
  4. ^ Xerox Data Systems (октябрь 1973 г.). Компьютерный справочник Xerox SIGMA 7 Manyal. п. 48. Получено 13 ноя, 2020.
  5. ^ RCA (март 1966 г.). Процессоры Spectra 70: 35 45 55 (PDF). п. 184. Получено 13 ноя, 2020.
  6. ^ ESA / 390 Enhanced Floating Point Support: Обзор
  7. ^ Schwarz, E.M .; Крыговски, К. А. (сентябрь 1999 г.). «Модуль с плавающей запятой S / 390 G5». Журнал исследований и разработок IBM. 43 (5.6): 707–721. Дои:10.1147 / ряд 435.0707.
  8. ^ Duale, A. Y .; Decker, M. H .; Zipperer, H.-G .; Aharoni, M .; Богизич, Т. Дж. (Январь 2007 г.). «Десятичные числа с плавающей запятой в z9: перспективы реализации и тестирования». Журнал исследований и разработок IBM. 51 (1.2): 217–227. CiteSeerX  10.1.1.123.9055. Дои:10.1147 / rd.511.0217.
  9. ^ Heller, L.C .; Фаррелл, М. С. (май 2004 г.). «Милликод в процессоре IBM zSeries». Журнал исследований и разработок IBM. 48 (3.4): 425–434. CiteSeerX  10.1.1.641.1164. Дои:10.1147 / rd.483.0425.
  10. ^ Schwarz, E.M .; Каперник, Дж. С .; Коулишоу, М. Ф. (январь 2009 г.). «Поддержка десятичных чисел с плавающей запятой в процессоре IBM System z10». Журнал исследований и разработок IBM. 53 (1): 4:1–4:10. Дои:10.1147 / JRD.2009.5388585.
  11. ^ z / Архитектура Принципы работы
  12. ^ а б «Макет записи набора данных в формате SAS Transport (XPORT)» (PDF). Получено 18 сентября, 2014.
  13. ^ http://www.seg.org/documents/10161/77915/seg_y_rev1.pdf
  14. ^ https://cran.r-project.org/web/packages/SASxport/SASxport.pdf

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