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

IEEE 754-2008 (ранее известный как IEEE 754r ) был опубликован в августе 2008 года и является важным пересмотр, и заменяет, IEEE 754-1985 с плавающей точкой стандарта , в то время как в 2019 году он был обновлен с пересмотром незначительной IEEE 754-2019 . Редакция 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 г., что «никакого прогресса не наблюдается, я приостанавливаю эти встречи до дальнейшего уведомления по этим причинам». В декабре 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: Рекомендуемые операции

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

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

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

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

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

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

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

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

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

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

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

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

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

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

использованная литература

внешние ссылки