stringtranslate.com

IBM шестнадцатеричный формат с плавающей запятой

Шестнадцатеричная плавающая запятая (теперь называемаяIBM HFP ) — это формат кодирования чисел с плавающей запятой, впервые представленный на компьютерах 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-битном слове:

В этом формате начальный бит не подавляется, а точка системы счисления (шестнадцатеричная) устанавливается слева от мантиссы (дроби в документации 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 .

Объединение знака, показателя степени плюс смещение и нормализованной дроби дает следующую кодировку:

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

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

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

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

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

Нуль

Ноль (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 , то есть:

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

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

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

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

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

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

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

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

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 используется в:

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

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

Решение для шестнадцатеричных чисел с плавающей запятой

В статье «Архитектура IBM System/360» этот выбор объясняется тем, что «частота предварительного сдвига, переполнения и потери точности после сдвига при сложении с плавающей запятой существенно снижается благодаря этому выбору». [16] Это позволило повысить производительность больших моделей System/360 и снизить стоимость маленьких. Авторы знали о возможности потери точности, но предполагали, что это не будет иметь существенного значения для 64-битных переменных с плавающей запятой. К сожалению, дизайнеры, похоже, не знали о законе Бенфорда , который означает, что большая часть чисел будет страдать от снижения точности.

В книге «Компьютерная архитектура» двух архитекторов System/360 цитируется исследование Суини 1958-65 годов, которое показало, что использование базы больше 2 значительно сокращает количество сдвигов, необходимых для выравнивания и нормализации, в частности количество необходимых различных сдвигов. . Они использовали более крупную базу, чтобы ускорить работу реализации, и выбор базы 16 был естественным, учитывая 8-битные байты. Предполагалось, что 32-битные числа с плавающей запятой будут использоваться только для вычислений, которые не будут распространять ошибки округления, а 64-битная двойная точность будет использоваться для всех научных и инженерных вычислений. В первоначальной реализации двойной точности отсутствовала защитная цифра, обеспечивающая правильное округление, но это было изменено вскоре после первых поставок клиентам. [17]

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

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

  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 Маньял. п. 48 . Проверено 13 ноября 2020 г. .
  5. ^ RCA (март 1966 г.). Процессоры Spectra 70: 35 45 55 (PDF) . п. 184 . Проверено 13 ноября 2020 г. .
  6. ^ Уоррен младший, Генри С. (2013) [2002]. «Распределение ведущих цифр». Хакерское наслаждение (2-е изд.). Аддисон Уэсли - Pearson Education, Inc., стр. 385–387. ISBN 978-0-321-84268-8. 0-321-84268-5.
  7. ^ Расширенная поддержка чисел с плавающей запятой ESA/390: обзор
  8. ^ Шварц, EM; Крыговский, Калифорния (сентябрь 1999 г.). «Блок вычислений с плавающей запятой S / 390 G5». Журнал исследований и разработок IBM . 43 (5,6): 707–721. дои : 10.1147/rd.435.0707.
  9. ^ Дуале, AY; Декер, Миннесота; Зипперер, Х.-Г.; Ахарони, М.; Бохизич, Ти Джей (январь 2007 г.). «Десятичное число с плавающей запятой в z9: перспективы реализации и тестирования». Журнал исследований и разработок IBM . 51 (1.2): 217–227. CiteSeerX 10.1.1.123.9055 . дои : 10.1147/рд.511.0217. 
  10. ^ Хеллер, LC; Фаррелл, MS (май 2004 г.). «Милликод в процессоре IBM zSeries». Журнал исследований и разработок IBM . 48 (3,4): 425–434. CiteSeerX 10.1.1.641.1164 . дои : 10.1147/rd.483.0425. 
  11. ^ Шварц, EM; Каперник, Дж. С.; Коулишоу, МФ (январь 2009 г.). «Поддержка десятичных чисел с плавающей запятой в процессоре IBM System z10». Журнал исследований и разработок IBM . 53 (1): 4:1–4:10. дои : 10.1147/JRD.2009.5388585.
  12. ^ z/Принципы работы архитектуры
  13. ^ ab «Схема записи набора данных в формате SAS Transport (XPORT)» (PDF) . Проверено 18 сентября 2014 г.
  14. ^ «Формат обмена данными SEG Y, версия 1, версия 1.0» (PDF) . Май 2002.
  15. ^ «Пакет SASxport» (PDF) . 10 марта 2020 г.
  16. ^ Амдал, Джин; Блаау, Геррит; Брукс-младший, Фредерик. «Архитектура IBM System/360». Журнал исследований и разработок IBM . 1964 : 87 . Проверено 4 сентября 2023 г.
  17. ^ Блаау, Геррит А.; Брукс, Фредерик П. (1997). Компьютерная архитектура (1-е изд.). Ридинг, Массачусетс: Аддисон-Уэслет. ISBN 0-201-10557-8.

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