Шестнадцатеричное число с плавающей запятой 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-битном слове:
1 7 24 (ширина в битах) S Опыт Дробная часть 31 30 ... 24 23 ... 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 Опыт Дробная часть 1 100 0010 0111 0110 1010 0000 0000 0000
Другими словами, представленное число равно -0,76A000.16 × 1666 − 64 = −0.4633789… × 16+2 = −118.625
Наибольшее представимое число
S Опыт Дробная часть 0 111 1111 1111 1111 1111 1111 1111 1111
Представленное число + 0.FFFFFF16 × 16127 − 64 = (1 − 16−6) × 1663 ≈ +7.2370051 × 1075
Наименьшее положительное нормализованное число
S Опыт Дробная часть 0 000 0000 0001 0000 0000 0000 0000 0000
Представленное число +0,116 × 160 − 64 = 16−1 × 16−64 ≈ +5.397605 × 10−79.
Нуль
S Опыт Дробная часть 0 000 0000 0000 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 Опыт Дробная часть 0 100 0000 0001 1001 1001 1001 1001 1010
У него всего 21 бит, тогда как двоичная версия имеет точность 24 бита.
Шесть шестнадцатеричных цифр точности примерно эквивалентны шести десятичным цифрам (т.е. (6-1) log10(16) ≈ 6,02). Для преобразования шестнадцатеричного числа с плавающей запятой одинарной точности в десятичную строку потребуется не менее 9 значащих цифр (т.е. 6 log10(16) + 1 ≈ 8,22), чтобы преобразовать обратно в то же шестнадцатеричное значение с плавающей запятой.
64-битная двойная точность
В двойная точность Формат HFP (называемый IBM «длинным») аналогичен «короткому» формату, за исключением того, что поле дроби шире, а число двойной точности хранится в двойном слове (8 байтов):
1 7 56 (ширина в битах) S Опыт Дробная часть 63 62 ... 56 55 ... 0 (битовый индекс)* * В документации IBM биты нумеруются слева направо, поэтому самый старший бит обозначается как бит с номером 0.
Показатель степени для этого формата покрывает только около четверти диапазона соответствующего двоичного формата IEEE.
14 шестнадцатеричных цифр точности примерно эквивалентны 17 десятичным цифрам. Для преобразования шестнадцатеричного числа с плавающей запятой двойной точности в десятичную строку потребуется не менее 18 значащих цифр, чтобы преобразовать обратно в то же шестнадцатеричное значение с плавающей запятой.
128 бит повышенной точности
IBM, названная расширенной точностью, учетверенная точность Формат HFP был добавлен в серию 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.
Арифметические операции
Большинство арифметических операций обрезаются, как простые карманные калькуляторы. Следовательно, 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 используется в:
- Транспортные файлы SAS 5 (.XPT) в соответствии с требованиями Управление по контролю за продуктами и лекарствами (FDA) для подачи заявок на новые лекарственные препараты (NDA),[12]
- GRIB (GRIdded Binary) файлы данных для обмена результатами моделей прогнозирования погоды (IEEE формат с плавающей запятой одинарной точности в текущей версии),
- GDS II Файлы формата (Graphic Database System II) (ОАЗИС является заменой), и
- СЕГ Y Файлы формата (Society of Exploration Geophysicists Y) (с плавающей запятой одинарной точности IEEE был добавлен в формат в 2002 году).[13]
Поскольку IBM - единственный оставшийся поставщик оборудования (и только в своих мэйнфреймах), использующий формат HFP, ни один из популярных форматов файлов не требует этого; За исключением того, что FDA требует формат файла SAS и «Все числа с плавающей запятой в файле хранятся с использованием представления мэйнфреймов IBM. [...] Большинство платформ используют представление IEEE для чисел с плавающей запятой. [...] Чтобы помочь вам в чтении и / или записи транспортных файлов, мы предоставляем процедуры для преобразования из представления IEEE (либо с прямым порядком, либо с прямым порядком байтов) в транспортное представление и обратно ».[12] Код формата IBM также доступен по ссылке LGPLv2.1.[14]
Системы, использующие формат с плавающей запятой IBM
- IBM System / 360 и преемники
- RCA Spectra 70
- Английская электрическая система 4
- GEC 4000 серии миникомпьютеры
- Interdata 16-битные и 32-битные компьютеры
- SDS Sigma серии
- Инструменты Техаса 990 /12
- Общие данные миникомпьютеры
Смотрите также
Рекомендации
- ^ Принципы работы IBM System / 360, Публикация IBM A22-6821-6, седьмое издание (13 января 1967 г.), стр.41-50
- ^ IBM System / 370 Принципы работы, Публикация IBM GA22-7000-4, пятое издание (1 сентября 1975 г.), стр. 157-170.
- ^ z / Архитектура Принципы работы, Публикация IBM SA22-7832-01, второе издание (октябрь 2001 г.), глава 9 и далее.
- ^ Xerox Data Systems (октябрь 1973 г.). Компьютерный справочник Xerox SIGMA 7 Manyal. п. 48. Получено 13 ноя, 2020.
- ^ RCA (март 1966 г.). Процессоры Spectra 70: 35 45 55 (PDF). п. 184. Получено 13 ноя, 2020.
- ^ ESA / 390 Enhanced Floating Point Support: Обзор
- ^ Schwarz, E.M .; Крыговски, К. А. (сентябрь 1999 г.). «Модуль с плавающей запятой S / 390 G5». Журнал исследований и разработок IBM. 43 (5.6): 707–721. Дои:10.1147 / ряд 435.0707.
- ^ 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.
- ^ Heller, L.C .; Фаррелл, М. С. (май 2004 г.). «Милликод в процессоре IBM zSeries». Журнал исследований и разработок IBM. 48 (3.4): 425–434. CiteSeerX 10.1.1.641.1164. Дои:10.1147 / rd.483.0425.
- ^ Schwarz, E.M .; Каперник, Дж. С .; Коулишоу, М. Ф. (январь 2009 г.). «Поддержка десятичных чисел с плавающей запятой в процессоре IBM System z10». Журнал исследований и разработок IBM. 53 (1): 4:1–4:10. Дои:10.1147 / JRD.2009.5388585.
- ^ z / Архитектура Принципы работы
- ^ а б «Макет записи набора данных в формате SAS Transport (XPORT)» (PDF). Получено 18 сентября, 2014.
- ^ http://www.seg.org/documents/10161/77915/seg_y_rev1.pdf
- ^ https://cran.r-project.org/web/packages/SASxport/SASxport.pdf
дальнейшее чтение
- Суини, Д. У. (1965). «Анализ сложения чисел с плавающей запятой». Журнал IBM Systems. 4 (1): 31–42. Дои:10.1147 / sj.41.0031.
- Томайко, Дж. (Лето 1995 г.). «Проблемы с плавающей точкой системы 360». IEEE Annals of the History of Computing. 17 (2): 62–63. Дои:10.1109 / MAHC.1995.10006. ISSN 1058-6180.
- Хардинг, Л. Дж. (1966), "Особенности системы / 360 с плавающей точкой", Материалы SHARE 27, 8–12 августа 1966 г., Представлено на SHARE XXVII, Торонто, Канада
- Хардинг, Л. Дж. (1966), "Модификации системы / 360 с плавающей запятой", ПОДЕЛИТЬСЯ Секретарь Распределение, стр. 11–27, SSD 157, C4470
- Андерсон, Стэнли Ф .; Эрл, Джон Дж .; Гольдшмидт, Роберт Эллиотт; Пауэрс, Дон М. (январь 1967 г.). «IBM System / 360 Model 91: блок выполнения с плавающей запятой». Журнал исследований и разработок IBM. 11 (1): 34–53. Дои:10.1147 / ряд.111.0034.
- Падегс, А. (1968). «Структурные аспекты System / 360 Model 85, III: Расширения архитектуры с плавающей запятой». Журнал IBM Systems. 7 (1): 22–29. Дои:10.1147 / sj.71.0022.
- Schwarz, E.M .; Sigal, L .; Макферсон, Т. Дж. (Июль 1997 г.). «Модуль CMOS с плавающей запятой для S / 390 Parallel Enterprise Server G4». Журнал исследований и разработок IBM. 41 (4.5): 475–488. Дои:10.1147 / ряд 414.0475.