stringtranslate.com

IEEE 754-2008 пересмотр

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

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

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

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

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

754r Фаза рабочей группы

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

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

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

754r Фаза голосования

Последняя версия проекта, версия 1.2.5, представленная в MSC, была датирована 4 октября 2006 года. [3] MSC принял проект 9 октября 2006 года. Проект был значительно изменен в деталях в процессе голосования.

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

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

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

Публикация стандарта IEEE 754-2008

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

Этот стандарт заменяет IEEE 754-1985 . IEEE 854, стандарт чисел с плавающей точкой, не зависящий от радиуса, был отменен в декабре 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: Операции

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

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

Мин и макс

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

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

Эти функции называются 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: Воспроизводимость

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

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

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

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

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

Индекс операций

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

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

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

В 754 определение потери точности гласило, что результат незначителен и приводит к потере точности.
Для определения «крошечного» состояния допускались два определения: до или после округления бесконечно точного результата до рабочей точности с неограниченным показателем степени.
Было разрешено два определения потери точности: неточный результат или потеря только из-за денормализации. Ни одна известная аппаратная система не реализовала последнее, и оно было удалено из пересмотренного стандарта как опция.
В приложении U к 754r рекомендуется, чтобы причиной сигнала о недогрузке были только крошечность после округления и неточность, приводящая к потере точности.

Ссылки

  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 . 29.08.2008. doi :10.1109/IEEESTD.2008.4610935. ISBN 978-0-7381-5752-8.(Примечание. Заменено стандартом IEEE Std 754-2019, пересмотренным вариантом IEEE 754-2008.)

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