Версия IEEE 754-2008
Эта статья включает список литературы , связанную литературу или внешние ссылки , но ее источники остаются неясными, поскольку в ней отсутствуют встроенные цитаты . ( Август 2009 г. ) |
IEEE 754-2008 (ранее известный как IEEE 754r ) представляет собой пересмотренную версию стандарта IEEE 754 для арифметики с плавающей запятой . Он был опубликован в августе 2008 года и представляет собой значительную переработку стандарта IEEE 754-1985 и заменяет его .Версия 2008 года расширила предыдущий стандарт там, где это было необходимо, добавила десятичную арифметику и форматы, ужесточила некоторые области исходного стандарта, которые остались неопределенными, и объединила их в IEEE 854 (стандарт с плавающей запятой, независимый от системы счисления).В некоторых случаях, когда более строгие определения двоичной арифметики с плавающей запятой могли быть несовместимы с производительностью некоторых существующих реализаций, они делались необязательными.В 2019 году он был дополнен незначительной доработкой IEEE 754-2019 . [1]
Процесс пересмотра [ править ]
Стандарт находился на стадии пересмотра с 2000 года, срок завершения - декабрь 2006 года. Пересмотр стандарта IEEE в целом состоит из трех этапов:
- Рабочая группа – комитет, создающий проект стандарта.
- Голосование – заинтересованные стороны подписываются на группу для голосования и голосуют по проекту (75% группы должны принять участие, и 75% должны одобрить проект для дальнейшего продвижения); комментарии по результатам голосования разрешаются Комитетом по резолюциям бюллетеней (BRC), и внесенные изменения должны быть повторно распространены в новом бюллетене, если они являются существенными.
- Когда все комментарии разрешены и дальнейших изменений нет, проект передается в 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] MSC принял проект 9 октября 2006 г. В ходе голосования в проект были внесены существенные изменения.
Первое голосование спонсоров проходило с 29 ноября 2006 г. по 28 декабря 2006 г. Из 84 членов голосующего органа ответили 85,7% - 78,6% проголосовали за одобрение. Были отрицательные голоса (и более 400 комментариев), поэтому в марте 2007 года было проведено повторное голосование; это получило одобрение 84%. В результате этого голосования было получено достаточно комментариев (более 130), поэтому был подготовлен третий проект для второго, 15-дневного повторного голосования, которое началось в середине апреля 2007 года. По технической причине процесс голосования был возобновлен с четвертого голосования в октябре. 2007 г.; в проект также были внесены существенные изменения в результате комментариев 650 избирателей и запросов спонсора (IEEE MSC); этот бюллетень просто не набрал требуемых 75% одобрения. На пятый тур голосования было получено 98,0% ответов при 91,0% одобрения, причем комментарии привели к относительно небольшим изменениям. Рейтинг одобрения 6-го, 7-го и 8-го голосования составил более 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. [4]
Этот стандарт заменяет IEEE 754-1985 . IEEE 854, независимый от Radix стандарт чисел с плавающей запятой, был отменен в декабре 2008 года.
Краткое изложение изменений [ править ]
Наиболее очевидными улучшениями стандарта являются добавление 16-битного и 128-битного двоичного типа и трех десятичных типов, некоторые новые операции и множество рекомендуемых функций. Однако повсюду были внесены существенные уточнения в терминологию. В этом кратком изложении освещаются основные различия в каждом основном пункте стандарта.
Пункт 1: Обзор [ править ]
Область применения (определенная спонсором стандарта) была расширена за счет включения десятичных форматов и арифметики, а также добавлены расширяемые форматы.
Пункт 2: Определения [ править ]
Многие определения были переписаны для ясности и последовательности. Некоторые термины были переименованы для ясности (например, денормализованный был переименован в субнормальный ).
Пункт 3: Форматы [ править ]
Описание форматов стало более регулярным, с различием между арифметическими форматами (в которых могут выполняться арифметические действия) и форматами обмена (имеющими стандартную кодировку). Соответствие стандарту теперь определяется в этих терминах.
Уровни спецификации формата с плавающей запятой были перечислены, чтобы прояснить различие между:
- теоретические действительные числа (расширенная числовая линия)
- объекты, которые могут быть представлены в формате (конечный набор чисел вместе с −0 , бесконечностями и NaN )
- конкретные представления сущностей: знак-показатель-значение и т. д.
- используемый битовый шаблон (кодировка).
Затем подробно объясняются наборы представимых объектов, показывая, что их можно рассматривать, рассматривая мантиссу как дробь или целое число. Определены конкретные наборы, известные как базовые форматы , и объяснены кодировки, используемые для обмена двоичными и десятичными форматами.
В форматы двоичного обмена добавлены « половинная точность » (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 определены, но оставляют некоторую свободу действий для случая, когда входные данные равны по значению, но различаются по представлению. В частности:
min(+0,−0)
илиmin(−0,+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: Воспроизводимость [ править ]
Этот пункт является новым; он рекомендует, чтобы языковые стандарты предоставляли средства для написания воспроизводимых программ (т. е. программ, которые будут давать одинаковый результат во всех реализациях языка), и описывает, что необходимо сделать для достижения воспроизводимых результатов.
Приложение А: Библиография [ править ]
Это приложение является новым; в нем перечислены некоторые полезные ссылки.
Приложение B: Поддержка отладки программ [ править ]
Это приложение является новым; рекомендации он предоставляет разработчикам отладчиков по функциям, необходимым для поддержки отладки кода с плавающей запятой.
Указатель операций [ править ]
Это новый индекс, в котором перечислены все операции, описанные в стандарте (обязательные или необязательные).
Обсуждается, но не включено [ править ]
Из-за изменений в конструкции и разработке ЦП стандарт IEEE 2008 года с плавающей запятой можно рассматривать как исторический или устаревший, как и стандарт 1985 года, который он заменил. Было много внешних дискуссий и вопросов, не охваченных процессом стандартизации; приведенные ниже элементы стали общеизвестными:
- Приложение «L» рекомендовало разработчикам языка, как привязывать элементы стандарта к функциям языка.
- В приложении «U» представлены рекомендации по выбору числовых определений нижнего значения.
- В 754 определение «недополнения» заключалось в том, что результат крошечный и приводит к потере точности.
- Для определения условия «крошечности» допускались два определения: до или после округления бесконечно точного результата до рабочей точности с неограниченным показателем степени.
- Допускались два определения потери точности: неточный результат или потеря, вызванная только денормализацией. Ни одна из известных аппаратных систем не реализовала последнюю, и она была удалена из пересмотренного стандарта как опция.
- Приложение U к 754r рекомендовало, чтобы причиной сигнала недостаточного заполнения была только небольшая величина после округления и неточность, поскольку потеря точности.
- В приложении «Z» представлены дополнительные типы данных для поддержки других форматов с плавающей запятой фиксированной ширины, а также форматов произвольной точности (т. е. где точность представления и округления определяется во время выполнения) – часть этого материала была перенесена в основная часть проекта путем обобщения раздела 5. Произвольная точность была исключена.
- Наследование и распространение режимов (обработка исключений, предварительная подстановка, округление) и флагов (неточное, недостаточное, переполнение, деление на ноль, недопустимое). Желание состоит в том, чтобы флаги передавались вызывающей стороне; и изменения режима могут быть унаследованы вызываемым абонентом, но не влиять на вызывающего абонента.
- Интервальная и другая арифметика обсуждались, но не были включены, так как выходят за рамки (и представляют собой большую часть работы сами по себе). В 2008 году начинается работа над предлагаемым стандартом IEEE для интервальной арифметики.
Ссылки [ править ]
- ^ «ANSI/IEEE Std 754-2019» . 754r.ucbtest.org . Проверено 6 августа 2019 г.
- ^ «Встреча 15 сентября 2005 года» . [ мертвая ссылка ]
- ^ ПРОЕКТ Стандарта арифметики с плавающей запятой P754, версия 1.2.5. Пересмотр стандарта ANSI/IEEE 754-1985 (отчет). 04.10.2006.
- ^ 754-2008 — Стандарт IEEE для арифметики с плавающей запятой . ИИЭЭ . 29 августа 2008 г. дои : 10.1109/IEESTD.2008.4610935 . ISBN 978-0-7381-5752-8 . (Примечание. Заменен стандартом IEEE Std 754-2019, пересмотренной версией IEEE 754-2008.)
Внешние ссылки [ править ]
- Рабочая страница комитета: IEEE 754: Стандарт двоичной арифметики с плавающей запятой.
- Плотно упакованная десятичная дробь
- Уильяма Кахана Статья о том, насколько бесполезны бессмысленные оценки округления в вычислениях с плавающей запятой
- Независимый от языка арифметический стандарт ISO
- RFC 1832 — XDR: представление внешних данных RFC