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

редактировать
Эта статья посвящена процессу пересмотра стандарта IEEE 754. Описание самого стандарта см. В IEEE 754.

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

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

СОДЕРЖАНИЕ
  • 1 Процесс пересмотра
    • 1.1 754r Этап рабочей группы
    • 1.2 754r Этап голосования
    • 1.3 754r Этап рассмотрения и утверждения
    • 1.4 Публикация IEEE Std 754-2008
  • 2 Краткое изложение изменений
    • 2.1 Раздел 1: Обзор
    • 2.2 Раздел 2: Определения
    • 2.3 Раздел 3: Форматы
    • 2.4 Пункт 4: Атрибуты и округление
    • 2.5 Пункт 5: Операции
      • 2.5.1 Мин. И макс.
      • 2.5.2 Десятичная арифметика
      • 2.5.3 Преобразование правильно округленной базы
    • 2.6 Раздел 6: Бесконечность, NaN и бит знака
    • 2.7 Пункт 7: Обработка исключений по умолчанию
    • 2.8 Раздел 8: Альтернативная обработка исключений
    • 2.9 Раздел 9: Рекомендуемые операции
    • 2.10 Раздел 10: Оценка выражения
    • 2.11 Раздел 11: Воспроизводимость
    • 2.12 Приложение A: Библиография
    • 2.13 Приложение B: Поддержка отладки программы
    • 2.14 Указатель операций
  • 3 Обсуждены, но не включены
  • 4 ссылки
  • 5 Внешние ссылки
Процесс доработки

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

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

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

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

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

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

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

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

Последняя версия проекта 1.2.5, представленная в MSC, была от 4 октября 2006 г. MSC принял проект 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% с постепенным уменьшением количества комментариев по каждому проекту; восьмой (у которого не было замечаний, относящихся к сфере охвата: 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.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Мин. И макс.

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

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

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

  • min(x,qNaN) = min(qNaN,x) = x
  • max(x,qNaN) = max(qNaN,x) = x

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

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

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

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

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

Раздел 6: Бесконечность, NaN и бит знака

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

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

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

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

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

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

См. Также: Рекомендуемые операции IEEE 754

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

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

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

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

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

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

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

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

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

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

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

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

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

  • Приложение «L» рекомендовало разработчикам языков, как привязать элементы стандарта к функциям языка.
  • В Приложении «U» содержится руководство по выбору числовых определений потери значимости.
В 754 г. определение потери значимости заключалось в том, что результат крошечный и вызывает потерю точности.
Для определения «крошечного» состояния допускались два определения: до или после округления бесконечно точного результата до рабочей точности с неограниченным показателем степени.
Допускались два определения потери точности: неточный результат или потеря только из-за денормализации. Последний не реализован ни в каких известных аппаратных системах, и он был удален из пересмотренного стандарта в качестве опции.
В Приложении U к 754r рекомендуется, чтобы причиной сигнала потери значимости были только малость после округления и неточность в виде потери точности.
  • В Приложении «Z» представлены дополнительные типы данных для поддержки других форматов с плавающей запятой фиксированной ширины, а также форматов произвольной точности (то есть, где точность представления и округления определяется во время выполнения) - часть этого материала была перемещена в тело проекта путем обобщения раздела 5. Произвольная точность была исключена.
  • Наследование и распространение режимов (обработка исключений, предварительная подстановка, округление) и флагов (неточность, недополнение, переполнение, деление на ноль, недопустимое). Желание состоит в том, чтобы флаги передавались вызывающему абоненту; и изменения режима могут быть унаследованы вызываемым, но не влияют на вызывающего.
  • Обсуждались интервалы и другая арифметика, но они не рассматривались как выходящие за рамки (и сами по себе большая часть работы). В 2008 году начинается работа над предложенным стандартом IEEE для интервальной арифметики.
использованная литература
внешние ссылки
Последняя правка сделана 2023-03-19 01:20:44
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте