Шестнадцатеричный с плавающей точкой (теперь называется ГФП от IBM ) представляет собой формат для кодирования чиселплавающей запятой впервые введена на IBM System / 360 компьютеров, и поддерживается на последующих машинахоснове этой архитектуры, [1] [2] [3] , а также как машины, которые должны были быть совместимы с приложениями с System / 360. [4] [5]
По сравнению с плавающей запятой 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. В этом случае результат округляется от нуля. [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) ( замена OASIS ), и
- Файлы формата SEG Y (Society of Exploration Geophysicists Y) (в 2002 году в формат был добавлен формат с плавающей запятой одинарной точности IEEE). [13]
Поскольку IBM - единственный оставшийся поставщик оборудования (и только в своих мэйнфреймах), использующий формат HFP, ни один из популярных форматов файлов не требует этого; За исключением того, что FDA требует формат файла SAS и «Все числа с плавающей запятой в файле хранятся с использованием представления мэйнфреймов IBM. [...] Большинство платформ используют представление IEEE для чисел с плавающей запятой. [...] Чтобы помочь вам в чтении и / или записи транспортных файлов, мы предоставляем процедуры для преобразования из представления IEEE (либо с прямым порядком, либо с прямым порядком байтов) в транспортное представление и обратно ». [12] Код формата IBM также доступен под LGPLv2.1 . [14]
Системы, использующие формат с плавающей запятой IBM
- IBM System / 360 и последователи
- RCA Spectra 70
- Английская электрическая система 4
- GEC серии 4000 миникомпьютеры
- 16-битные и 32-битные компьютеры Interdata
- SDS Sigma серии
- Texas Instruments 990 / +12
- Миникомпьютеры Data General
Смотрите также
- Стандарт IEEE 754 для арифметики с плавающей запятой
- Двоичный формат Microsoft
Рекомендации
- ^ Принципы работы 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 Расширенная поддержка с плавающей запятой: обзор
- ^ Schwarz, EM; Крыговски, Калифорния (сентябрь 1999 г.). «Устройство с плавающей запятой S / 390 G5». Журнал исследований и разработок IBM . 43 (5.6): 707–721. DOI : 10.1147 / rd.435.0707 .
- ^ Дуале, AY; Decker, MH; Zipperer, H.-G .; Aharoni, M .; Богизич, Т.Дж. (январь 2007 г.). «Десятичные числа с плавающей запятой в z9: перспективы реализации и тестирования». Журнал исследований и разработок IBM . 51 (1.2): 217–227. CiteSeerX 10.1.1.123.9055 . DOI : 10.1147 / rd.511.0217 .
- ^ Heller, LC; Фаррелл, MS (май 2004 г.). «Милликод в процессоре IBM zSeries». Журнал исследований и разработок IBM . 48 (3.4): 425–434. CiteSeerX 10.1.1.641.1164 . DOI : 10.1147 / rd.483.0425 .
- ^ Schwarz, EM; Каперник, JS; Каулишоу, MF (январь 2009 г.). «Поддержка десятичных чисел с плавающей запятой в процессоре IBM System z10». Журнал исследований и разработок IBM . 53 (1): 4: 1–4: 10. DOI : 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
дальнейшее чтение
- Суини, DW (1965). «Анализ сложения чисел с плавающей запятой». IBM Systems Journal . 4 (1): 31–42. DOI : 10.1147 / sj.41.0031 .
- Томайко, Дж. (Лето 1995 г.). «Проблемы с плавающей точкой системы 360». IEEE Annals of the History of Computing . 17 (2): 62–63. DOI : 10.1109 / MAHC.1995.10006 . ISSN 1058-6180 .
- Harding, LJ (1966), "Idiosyncrasies of System / 360 Floating-Point", Proceedings of SHARE 27, 8–12 августа 1966 г. , представлено на SHARE XXVII, Торонто, Канада
- Harding, LJ (1966), «Модификации системы / 360 с плавающей запятой» , раздел «Разделение секретарей» , стр. 11–27, SSD 157, C4470
- Андерсон, Стэнли Ф .; Эрл, Джон Дж .; Гольдшмидт, Роберт Эллиотт; Пауэрс, Дон М. (январь 1967 г.). «IBM System / 360 Model 91: блок выполнения с плавающей запятой». Журнал исследований и разработок IBM . 11 (1): 34–53. DOI : 10.1147 / rd.111.0034 .
- Падегс, А. (1968). «Структурные аспекты System / 360 Model 85, III: Расширения к архитектуре с плавающей запятой». IBM Systems Journal . 7 (1): 22–29. DOI : 10.1147 / sj.71.0022 .
- Schwarz, EM; Sigal, L .; Макферсон, Т.Дж. (июль 1997 г.). «Модуль CMOS с плавающей запятой для S / 390 Parallel Enterprise Server G4». Журнал исследований и разработок IBM . 41 (4.5): 475–488. DOI : 10.1147 / rd.414.0475 .