IBM шестнадцатеричный формат с плавающей запятой
с плавающей запятой Форматы |
---|
ИЭЭЭ 754 |
|
Другой |
Альтернативы |
Шестнадцатеричная плавающая запятая (теперь называемая HFP 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 (ширина в битах) С Опыт Фракция 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-битную дробь .0111 0110 1010 0000 0000 0000 2 .
Нормализованное значение переместило точку системы счисления на две шестнадцатеричные цифры влево, что дало множитель и показатель степени 16. +2 . К показателю степени (+2) добавляется смещение +64, что дает +66, что равно 100 0010 2 .
Объединение знака, показателя степени плюс смещение и нормализованной дроби дает следующую кодировку:
С Опыт Фракция 1 100 0010 0111 0110 1010 0000 0000 0000
Другими словами, представленное число равно −0,76A000 16 × 16. 66 − 64 = −0.4633789… × 16 +2 = −118.625
Наибольшее представимое число
[ редактировать ]С Опыт Фракция 0 111 1111 1111 1111 1111 1111 1111 1111
Представленное число: +0.FFFFFF 16 × 16. 127 − 64 = (1 − 16 −6 ) × 16 63 ≈ +7.2370051 × 10 75
Наименьшее положительное нормализованное число
[ редактировать ]С Опыт Фракция 0 000 0000 0001 0000 0000 0000 0000 0000
Представленное число +0,1 16 × 16. 0 − 64 = 16 −1 × 16 −64 ≈ +5.397605 × 10 −79 .
Ноль
[ редактировать ]С Опыт Фракция 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 бит. Из-за эффекта «колеблющейся точности» некоторые расчеты могут быть очень неточными. Это вызвало серьезную критику. [6]
Хорошим примером неточности является представление десятичного значения 0,1. Он не имеет точного двоичного или шестнадцатеричного представления. В шестнадцатеричном формате он представлен как 0,19999999... 16 или 0,0001 1001 1001 1001 1001 1001 1001... 2 , то есть:
С Опыт Фракция 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 (ширина в битах) С Опыт Фракция 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 (ширина в битах) С Опыт Дробь (старшие 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. В этом случае результат округляется от нуля. [7]
IEEE 754 на мейнфреймах IBM
[ редактировать ]Начиная с S/390 G5 в 1998 году, [8] Мэйнфреймы IBM также включают в себя двоичные блоки с плавающей запятой IEEE, соответствующие стандарту IEEE 754 для арифметики с плавающей запятой . Десятичная система с плавающей запятой IEEE была добавлена в IBM System z9 GA2. [9] в 2007 году с использованием милликода [10] а в 2008 году — на IBM System z10 в аппаратном обеспечении. [11]
Современные мэйнфреймы IBM поддерживают три системы счисления с плавающей запятой: 3 шестнадцатеричных (HFP), 3 двоичных (BFP) формата и 3 десятичных (DFP) формата. На каждое ядро приходится два блока операций с плавающей запятой; один поддерживает HFP и BFP, а другой поддерживает DFP; существует один файл регистров, FPRs, который содержит все три формата. Начиная с z13 в 2015 году, в процессоры добавлена векторная функция, включающая 32 векторных регистра шириной 128 бит каждый; векторный регистр может содержать два 64-битных или четыре 32-битных числа с плавающей запятой. [12] Традиционные 16 регистров с плавающей запятой накладываются на новые векторные регистры, поэтому некоторыми данными можно манипулировать с помощью традиционных инструкций с плавающей запятой или с помощью новых векторных инструкций.
Специальное использование
[ редактировать ]Формат IBM HFP используется в:
- Транспортные файлы SAS 5 (.XPT), требуемые Управлением по контролю за продуктами и лекарствами (FDA) для подачи заявок на исследования новых лекарств (NDA), [13]
- Файлы данных GRIB (GRIdded Binary) для обмена результатами моделей прогнозирования погоды ( формат с плавающей запятой одинарной точности IEEE в текущей версии),
- Файлы формата GDS II (Graphic Database System II) ( OASIS ) и заменой является
- Файлы формата SEG Y (Общество геофизиков-исследователей Y) (в 2002 году к формату были добавлены числа с плавающей запятой одинарной точности IEEE). [14]
Поскольку IBM является единственным оставшимся поставщиком оборудования, использующим формат HFP, а единственные машины IBM, поддерживающие этот формат, — это их мэйнфреймы, немногие форматы файлов требуют этого. Единственным исключением является формат транспортных файлов SAS 5, которого требует FDA; в этом формате: «Все числа с плавающей запятой в файле хранятся с использованием представления мэйнфрейма IBM. [...] Большинство платформ используют представление IEEE для чисел с плавающей запятой. [...] Чтобы помочь вам в чтении и/ или при написании транспортных файлов мы предоставляем процедуры для преобразования представления IEEE (с прямым или прямым порядком байтов) в транспортное представление и обратно». [13] Код для формата IBM также доступен по лицензии LGPLv2.1 . [15]
Системы, использующие формат IBM с плавающей запятой
[ редактировать ]- IBM System/360 и его преемники
- RCA Спектра 70
- Английская электрическая система 4
- серии GEC 4000 Миникомпьютеры
- Interdata 16- и 32-битные компьютеры
- Серия СДС Сигма
- Данные Общие миникомпьютеры
- серии ICL 2900 Компьютеры
- Мэйнфреймы Siemens серий 7.700 и 7.500 и их преемники
Решение для шестнадцатеричных чисел с плавающей запятой
[ редактировать ]В статье «Архитектура IBM System/360» этот выбор объясняется тем, что «частота предварительного сдвига, переполнения и потери точности после сдвига при сложении с плавающей запятой существенно снижается благодаря этому выбору». [16] Это позволило повысить производительность больших моделей System/360 и снизить стоимость маленьких. Авторы знали о возможности потери точности, но предполагали, что это не будет иметь существенного значения для 64-битных переменных с плавающей запятой. К сожалению, дизайнеры, похоже, не знали о законе Бенфорда , который означает, что большая часть чисел будет страдать от снижения точности.
В книге «Компьютерная архитектура» двух архитекторов System/360 цитируется исследование Суини 1958-65 годов, которое показало, что использование базы больше 2 значительно сокращает количество сдвигов, необходимых для выравнивания и нормализации, в частности количество различных необходимых сдвигов. . Они использовали более крупную базу, чтобы ускорить работу реализации, и выбор базы 16 был естественным, учитывая 8-битные байты. Предполагалось, что 32-битные числа с плавающей запятой будут использоваться только для вычислений, которые не будут распространять ошибки округления, а 64-битная двойная точность будет использоваться для всех научных и инженерных вычислений. В первоначальной реализации двойной точности отсутствовала защитная цифра, обеспечивающая правильное округление, но это было изменено вскоре после первых поставок клиентам. [17]
См. также
[ редактировать ]Ссылки
[ редактировать ]- ^ Принципы работы 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 г. .
- ^ Уоррен-младший, Генри С. (2013) [2002]. «Распределение ведущих цифр». Хакерское наслаждение (2-е изд.). Аддисон Уэсли - Pearson Education, Inc., стр. 385–387. ISBN 978-0-321-84268-8 . 0-321-84268-5.
- ^ Расширенная поддержка чисел с плавающей запятой ESA/390: обзор
- ^ Шварц, Э.М.; Крыговский, Калифорния (сентябрь 1999 г.). «Блок вычислений с плавающей запятой S / 390 G5». Журнал исследований и разработок IBM . 43 (5,6): 707–721. дои : 10.1147/рд.435.0707 .
- ^ Дуале, AY; Декер, Миннесота; Зипперер, Х.-Г.; Ахарони, М.; Бохизич, Ти Джей (январь 2007 г.). «Десятичное число с плавающей запятой в z9: перспективы реализации и тестирования». Журнал исследований и разработок IBM . 51 (1.2): 217–227. CiteSeerX 10.1.1.123.9055 . дои : 10.1147/rd.511.0217 .
- ^ Хеллер, LC; Фаррелл, MS (май 2004 г.). «Милликод в процессоре IBM zSeries». Журнал исследований и разработок IBM . 48 (3.4): 425–434. CiteSeerX 10.1.1.641.1164 . дои : 10.1147/rd.483.0425 .
- ^ Шварц, Э.М.; Каперник, Дж. С.; Коулишоу, МФ (январь 2009 г.). «Поддержка десятичных чисел с плавающей запятой в процессоре IBM System z10». Журнал исследований и разработок IBM . 53 (1): 4:1–4:10. дои : 10.1147/JRD.2009.5388585 .
- ^ z/Принципы работы архитектуры
- ↑ Перейти обратно: Перейти обратно: а б «Схема записи набора данных в формате SAS Transport (XPORT)» (PDF) . Проверено 18 сентября 2014 г.
- ^ «Формат обмена данными SEG Y, версия 1, версия 1.0» (PDF) . Май 2002.
- ^ «Пакет 'SASxport' » (PDF) . 10 марта 2020 г.
- ^ Амдал, Джин; Блаау, Геррит; Брукс-младший, Фредерик. «Архитектура IBM System/360» . Журнал исследований и разработок IBM . 1964 : 87 . Проверено 4 сентября 2023 г.
- ^ Блаау, Геррит А.; Брукс, Фредерик П. (1997). Компьютерная архитектура (1-е изд.). Ридинг, Массачусетс: Аддисон-Уэслет. ISBN 0-201-10557-8 .
Дальнейшее чтение
[ редактировать ]- Суини, Д.В. (1965). «Анализ сложения с плавающей запятой». IBM Systems Journal . 4 (1): 31–42. дои : 10.1147/sj.41.0031 .
- Томайко, Дж. (лето 1995 г.). «Проблемы с плавающей запятой в системе 360». IEEE Анналы истории вычислений . 17 (2): 62–63. дои : 10.1109/MAHC.1995.10006 . ISSN 1058-6180 .
- Хардинг, Л.Дж. (1966), «Идиосинкразия системы с плавающей запятой System/360», Proceedings of SHARE 27, 8–12 августа 1966 г. , представлено на SHARE XXVII, Торонто, Канада doi:10.5281/zenodo.10566524 .
- Хардинг, Л.Дж. (1966), «Модификации системы с плавающей запятой System/360», Proceedings of SHARE 27, 8–12 августа 1966 г. , представлено на SHARE XXVII, Торонто, Канада doi:10.5281/zenodo.10566780 .
- Хардинг, Л.Дж. (1966), «Предлагаемая модификация умножения с плавающей запятой», предложил инженерные изменения в корпорации IBM, doi:10.5281/zenodo.10567044 .
- Андерсон, Стэнли Ф.; Эрл, Джон Г.; Гольдшмидт, Роберт Эллиотт; Пауэрс, Дон М. (январь 1967 г.). «IBM System/360 Model 91: Модуль выполнения операций с плавающей запятой». Журнал исследований и разработок IBM . 11 (1): 34–53. дои : 10.1147/rd.111.0034 .
- Падегс, А. (1968). «Структурные аспекты System/360 Model 85, III: Расширения архитектуры с плавающей запятой». IBM Systems Journal . 7 (1): 22–29. дои : 10.1147/sj.71.0022 .
- Шварц, Э.М.; Сигал, Л.; Макферсон, Ти Джей (июль 1997 г.). «CMOS-модуль с плавающей запятой для S / 390 Parallel Enterprise Server G4». Журнал исследований и разработок IBM . 41 (4,5): 475–488. дои : 10.1147/rd.414.0475 .