WikiDer > Редакция IEEE 754-2008

IEEE 754-2008 revision

IEEE 754-2008 (ранее известный как IEEE 754r) был опубликован в августе 2008 года и представляет собой значительную переработку и заменяет IEEE 754-1985 плавающая точка стандарт, а в 2019 году он был обновлен с незначительной доработкой IEEE 754-2019.[1] Редакция 2008 года расширила предыдущий стандарт там, где это было необходимо, добавила десятичную арифметику и форматы, ужесточила некоторые области исходного стандарта, которые были оставлены неопределенными, и объединены в IEEE 854 (стандарт с плавающей запятой, не зависящий от системы счисления).

В некоторых случаях, когда более строгие определения двоичной арифметики с плавающей запятой могли быть несовместимы по производительности с некоторыми существующими реализациями, они были сделаны необязательными.

Процесс пересмотра

Стандарт находился в процессе пересмотра с 2000 года, а окончательная дата его завершения - декабрь 2006 года. Пересмотр стандарта IEEE в целом состоит из трех этапов:

  1. Рабочая группа - комитет, создающий проект стандарта.
  2. Бюллетень - заинтересованные стороны подписываются на группа для голосования и голосование по проекту (75% группы должны участвовать, и 75% должны одобрить, чтобы проект был принят); комментарии по результатам голосования разрешаются Комитет по разрешению бюллетеней (BRC) и внесенные изменения должны быть повторены в новом бюллетене, если они являются существенными
  3. Когда все комментарии разрешены и дальнейших изменений нет, проект передается в IEEE для рассмотрения, утверждения и публикации (это также может привести к изменениям и бюллетеням, хотя это бывает редко).

11 июня 2008 года он был единогласно одобрен Комитетом по пересмотру IEEE (RevCom), и он был официально одобрен Советом по стандартам IEEE-SA 12 июня 2008 года. Он был опубликован 29 августа 2008 года.

754r Этап рабочей группы

Участие в разработке стандарта было открыто для людей, хорошо разбирающихся в арифметике с плавающей запятой. Более 90 человек посетили как минимум одно из ежемесячных собраний, которые проводились в Силиконовая долина, и многие другие приняли участие в списке рассылки.

Иногда прогресс был медленным, что побудило председателя объявить на встрече 15 сентября 2005 г.[2] что «никакого прогресса не наблюдается, я приостанавливаю эти встречи до дальнейшего уведомления по этим причинам». В декабре 2005 года комитет был реорганизован в соответствии с новыми правилами с планируемой датой завершения работы в декабре 2006 года.

В феврале 2006 г. были приняты новые политики и процедуры. В сентябре 2006 г. был одобрен рабочий проект для отправки в родительский спонсирующий комитет (комитет по стандартам микропроцессоров IEEE или MSC) для редактирования и отправки в бюллетень спонсоров.

754r Этап голосования

Последняя версия проекта 1.2.5, представленная MSC, была от 4 октября 2006 г.[3] КБМ принял проект 9 октября 2006 г. Проект был существенно изменен в ходе голосования.

Первое голосование спонсоров проводилось с 29 ноября по 28 декабря 2006 года. Из 84 членов органа с правом голоса ответили 85,7% - 78,6% проголосовали за. Были голоса против (и более 400 комментариев), поэтому в марте 2007 года было проведено повторное голосование; это получило одобрение 84%. В этом бюллетене было достаточно комментариев (более 130) о том, что был подготовлен третий проект для второго, 15-дневного, повторного голосования, которое началось в середине апреля 2007 года. По техническим причинам процесс голосования был возобновлен с 4-го тура в октябре. 2007; в проект также были внесены существенные изменения в результате комментариев 650 избирателей и запросов спонсора (IEEE MSC); этот бюллетень просто не получил требуемого 75% одобрения. Пятый тур голосования получил 98,0% откликов при одобрении 91,0%, при этом комментарии привели к относительно небольшим изменениям. Шестое, седьмое и восьмое голосование подтвердили рейтинг одобрения более 90% с постепенным уменьшением количества комментариев по каждому проекту; 8-е (в котором не было замечаний, относящихся к сфере охвата: 9 повторяли предыдущие комментарии, а один относился к материалам, не включенным в проект) был представлен Комитету по пересмотру стандартов IEEE («RevCom») для утверждения в качестве стандарта IEEE.

754r Этап рассмотрения и утверждения

Комитет по пересмотру стандартов IEEE (RevCom) рассмотрел и единогласно одобрил проект IEEE 754r на своем заседании в июне 2008 года, и он был одобрен Советом по стандартам IEEE-SA 12 июня 2008 года. Окончательное редактирование завершено, и документ направлен в Отдел публикаций стандартов IEEE для публикации.

Публикация IEEE Std 754-2008

Новый стандарт IEEE 754 (формально IEEE Std 754-2008, стандарт IEEE для арифметики с плавающей запятой) был опубликован компьютерным сообществом IEEE 29 августа 2008 г. и доступен на веб-сайте IEEE Xplore.[4]

Этот стандарт заменяет IEEE 754-1985. IEEE 854, стандарт Radix-Independent с плавающей запятой, был отозван в декабре 2008 года.

Краткое изложение изменений

Наиболее очевидные усовершенствования стандарта - это добавление 16-битного и 128-битного двоичного типа и трех десятичных типов, некоторые новые операции и многие рекомендуемые функции. Однако повсюду были внесены значительные уточнения в терминологию. Это краткое изложение подчеркивает основные различия в каждом основном разделе стандарта.

Пункт 1: Обзор

Объем (определяемый спонсором стандарта) был расширен за счет включения десятичных форматов и арифметики, а также добавлены расширяемые форматы.

Пункт 2: Определения

Многие определения были переписаны для уточнения и единообразия. Некоторые термины были переименованы для ясности (например, денормализованный был переименован в субнормальный).

Пункт 3: Форматы

Описание форматов стало более регулярным, с различием между арифметические форматы (в котором может выполняться арифметика) и форматы обмена (которые имеют стандартную кодировку). Соответствие стандарту теперь определяется в этих терминах.

Уровни спецификации формата с плавающей запятой были перечислены, чтобы прояснить различие между:

  1. теоретические действительные числа (расширенная числовая строка)
  2. объекты, которые могут быть представлены в формате (конечный набор чисел вместе с −0, бесконечности, и NaN)
  3. конкретные представления сущностей: знак-показатель-значение и т. д.
  4. используемый битовый шаблон (кодировка).

Затем подробно объясняются наборы представимых сущностей, показывая, что с ними можно обращаться, когда значащая величина рассматривается либо как дробь, либо как целое число. Конкретные наборы, известные как основные форматы определены, и объяснены кодировки, используемые для обмена двоичным и десятичным форматами.

Бинарные форматы обмена имеют знак "половинная точность"(16-битный формат хранения) и"четверная точность"(128-битный формат) добавлен вместе с обобщенными формулами для некоторых более широких форматов; основные форматы имеют 32-битную, 64-битную и 128-битную кодировку.

Описаны три новых десятичных формата, соответствующие длинам 32–128-битных двоичных форматов. Они дают десятичные форматы обмена с 7, 16 и 34-значными значащими значениями, которые могут быть нормализованы или ненормализованы. Для максимального диапазона и точности форматы объединяют часть экспоненты и мантиссы в комбинированное поле, и сжать оставшуюся часть мантиссы, используя десятичное целочисленное кодирование (которое использует Плотно упакованная десятичная дробь, или DPD, сжатая форма BCD) кодирование или обычное двоичный целочисленная кодировка. Основными форматами являются два больших размера, которые имеют 64-битную и 128-битную кодировку. Также указаны обобщенные формулы для некоторых других форматов обмена.

Расширенные и расширяемые форматы позволяют выполнять арифметические операции с другой точностью и диапазонами.

Пункт 4: Атрибуты и округление

Этот пункт был изменен, чтобы поощрять использование статических атрибутов для управления операциями с плавающей запятой и (в дополнение к обязательным атрибутам округления) разрешать альтернативную обработку исключений, расширение промежуточных результатов, оптимизацию изменения значений и воспроизводимость.

В округление до ближайшего, связь от нуля Добавлен атрибут округления (требуется только для десятичных операций).

Пункт 5: Операции

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

Новые операции включают слитное умножение – сложение (FMA), явные преобразования, классификационные предикаты (isNan (Икс) и т. д.), различные функции min и max, общий предикат упорядочивания и две операции, зависящие от десятичной дроби (samequantum и quantize).

Мин. И макс.

В мин и Максимум операции определены, но оставляют некоторую свободу действий для случая, когда входы равны по значению, но различаются по представлению. Особенно:

  • мин (+ 0, -0) или же мин (-0, + 0) должен произвести что-то с нулевым значением, но всегда может возвращать первый аргумент.

Для поддержки таких операций, как управление окнами, в которых ввод NaN должен быть незаметно заменен одной из конечных точек, определены min и max для выбора числа, Икс, вместо тихого NaN:

  • min (x, qNaN) = min (qNaN, x) = x
  • макс (х, qNaN) = макс (qNaN, х) = х

Эти функции называются minNum и maxNum чтобы указать, что они предпочитают число тихому NaN. Однако при наличии сигнального ввода NaN возвращается тихий NaN, как и при обычных операциях. После публикации стандарта было замечено, что эти правила делают эти операции неассоциативными; по этой причине они были заменены новыми операциями в IEEE 754-2019.

Десятичная арифметика

Десятичная арифметика, совместимая с используемой в Ява, C #, PL / I, КОБОЛ, Python, REXXи т. д., также определяется в этом разделе. В общем, десятичная арифметика следует тем же правилам, что и двоичная арифметика (результаты правильно округляются и т. Д.), С дополнительными правилами, которые определяют показатель степени результата (во многих случаях возможно более одного).

Правильно округленное базовое преобразование

В отличие от 854, 754-2008 требует правильного округления базовая конверсия между десятичным и двоичным числами с плавающей запятой в диапазоне, который зависит от формата.

Пункт 6: бесконечность, NaN и бит знака

Этот пункт был переработан и уточнен, но без существенных дополнений.

Пункт 7: Обработка исключений по умолчанию

Этот пункт был переработан и значительно разъяснен, но без существенных дополнений.

Раздел 8: Альтернативная обработка исключений

Этот пункт был расширен по сравнению с предыдущим разделом 8 («Ловушки»), чтобы разрешить необязательную обработку исключений в различных формах, включая прерывания и другие модели, такие как try / catch. Ловушки и другие механизмы исключения остаются необязательными, как и в IEEE 754-1985.

Раздел 9: Рекомендуемые операции

Этот пункт новый; он рекомендует пятьдесят операций, включая логарифмические, степенные и тригонометрические функции, которые должны быть определены языковыми стандартами. Все они являются необязательными (для соответствия стандарту они не требуются). Операции включают некоторые динамические режимы для атрибутов, а также набор операций сокращения (сумма, масштабируемое произведение и т. Д.).

Пункт 10: оценка выражения

Этот пункт новый; он рекомендует, как языковые стандарты должны определять семантику последовательностей операций, и указывает на тонкости буквальных значений и оптимизаций, которые изменяют значение результата.

Раздел 11: Воспроизводимость

Этот пункт новый; он рекомендует, чтобы языковые стандарты предоставляли средства для написания воспроизводимых программ (т. е. программ, которые будут давать одинаковый результат во всех реализациях языка), и описывает, что необходимо сделать для достижения воспроизводимых результатов.

Приложение A: Библиография

Это новое приложение; в нем перечислены некоторые полезные ссылки.

Приложение B: Поддержка отладки программы

Это новое приложение; он предоставляет руководство для отладчик разработчикам функций, которые необходимы для поддержки отладки кода с плавающей запятой.

Указатель операций

Это новый индекс, в котором перечислены все операции, описанные в стандарте (обязательные или необязательные).

Обсуждается, но не включено

Из-за изменений в конструкции и разработке ЦП стандарт IEEE 2008 года для операций с плавающей запятой можно было рассматривать как устаревший или устаревший как замененный им стандарт 1985 года. Было много сторонних обсуждений и вопросов, не охваченных процессом стандартизации, нижеперечисленные вопросы стали достоянием общественности:

  • Приложение «L» рекомендовало разработчикам языков, как привязать элементы стандарта к функциям языка.
  • В Приложении «U» содержится руководство по выбору числовых определений потери значимости.
В 754 г. определение потери значимости заключалось в том, что результат крошечный и вызывает потерю точности.
Для определения «крошечного» состояния допускались два определения: до или после округления бесконечно точного результата до рабочей точности с неограниченным показателем степени.
Допускались два определения потери точности: неточный результат или потеря только из-за денормализации. Последний не реализован ни в каких известных аппаратных системах, и он был удален из пересмотренного стандарта в качестве опции.
В Приложении U к 754r рекомендуется, чтобы причиной сигнала потери значимости была только незначительность после округления и неточность в виде потери точности.
  • В Приложении «Z» представлены дополнительные типы данных для поддержки других форматов с плавающей запятой фиксированной ширины, а также форматов произвольной точности (т. Е. Где точность представления и округления определяется во время выполнения) - часть этого материала была перемещена в тело проекта путем обобщения раздела 5. Произвольная точность была исключена.
  • Наследование и распространение режимов (обработка исключений, предварительная подстановка, округление) и флагов (неточность, недополнение, переполнение, деление на ноль, недопустимое). Желательно, чтобы флаги передавались вызывающему; и изменения режима могут быть унаследованы вызываемым, но не влияют на вызывающего.
  • Обсуждались интервалы и другая арифметика, но они не рассматривались как выходящие за рамки (и сами по себе большая часть работы). Работа над предложенным стандартом IEEE для интервальной арифметики начинается в 2008 году.

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

  1. ^ "ANSI / IEEE Std 754-2019". 754r.ucbtest.org. Получено 2019-08-06.
  2. ^ «Встреча 15 сентября 2005 г.».
  3. ^ ПРОЕКТ Стандарта арифметики с плавающей запятой P754, версия 1.2.5. Пересмотр ANSI / IEEE Std 754-1985 (Отчет). 2006-10-04.
  4. ^ 754-2008 - Стандарт IEEE для арифметики с плавающей запятой. IEEE. 2008-08-29. Дои:10.1109 / IEEESTD.2008.4610935. ISBN 978-0-7381-5752-8. (NB. Заменено IEEE Std 754-2019, редакцией IEEE 754-2008.)

внешняя ссылка