Из Википедии, бесплатной энциклопедии
Перейти к навигации Перейти к поиску

Стандарт IEEE для арифметики с плавающей точкой ( IEEE 754 с ) представляет собой технический стандарт для арифметики с плавающей точкой , установленной в 1985 году Институтом инженеров электротехники и электроники (IEEE). Стандарт решает многие проблемы, обнаруженные в различных реализациях с плавающей запятой, которые затрудняют их надежное и портативное использование . Многие аппаратные устройства с плавающей запятой используют стандарт IEEE 754.

Стандарт определяет:

  • арифметические форматы: наборы двоичных и десятичных данных с плавающей запятой, которые состоят из конечных чисел (включая нули со знаком и субнормальные числа ), бесконечности и специальных «не числовых » значений ( NaN ).
  • форматы обмена: кодировки (битовые строки), которые могут использоваться для обмена данными с плавающей запятой в эффективной и компактной форме
  • правила округления: свойства, которые должны выполняться при округлении чисел во время арифметических операций и преобразований
  • операции: арифметические и другие операции (например, тригонометрические функции ) с арифметическими форматами
  • обработка исключений: указание на исключительные условия (например, деление на ноль , переполнение и т. д. )

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

Стандартная разработка [ править ]

Первый стандарт арифметики с плавающей запятой, IEEE 754-1985 , был опубликован в 1985 году. Он охватывал только двоичную арифметику с плавающей запятой.

Новая версия IEEE 754-2008 была опубликована в августе 2008 года после семилетнего процесса пересмотра под председательством Дэна Зураса и редактором Майка Коулишоу . Он заменил IEEE 754-1985 (двоичная арифметика с плавающей запятой) и стандарт IEEE 854-1987 для Radix-независимой арифметики с плавающей запятой . Двоичные форматы исходного стандарта включены в этот новый стандарт вместе с тремя новыми базовыми форматами, одним двоичным и двумя десятичными. Чтобы соответствовать текущему стандарту, реализация должна реализовывать по крайней мере один из основных форматов как арифметический формат и как формат обмена.

Международный стандарт ISO / IEC / IEEE 60559: 2011 (с содержанием, идентичным IEEE 754-2008) был одобрен для принятия через JTC1 / SC 25 в соответствии с соглашением ISO / IEEE PSDO [2] и опубликован. [3]

Текущая версия IEEE 754-2019, опубликованная в июле 2019 года, является производной и заменяет IEEE 754-2008 после процесса пересмотра, начатого в сентябре 2015 года под председательством Дэвида Г. Хау и отредактированным Майком Коулишоу. Он включает в себя в основном пояснения (например, totalOrder ) и исправления дефектов (например, minNum ), но также включает некоторые новые рекомендуемые операции (например, augmentedAddition ). [4] [5]

Международный стандарт ISO / IEC 60559: 2020 (с содержанием, идентичным IEEE 754-2019) был одобрен для принятия через JTC1 / SC 25 и опубликован. [6]

Форматы [ править ]

Формат IEEE 754 - это «набор представлений числовых значений и символов». Формат также может включать способ кодирования набора. [7]

Формат с плавающей запятой определяется следующим образом:

  • основание (также называемое основанием системы счисления ) b , которое равно 2 (двоичное) или 10 (десятичное) в IEEE 754;
  • точность p ;
  • диапазон экспоненты от emin до emax , где emin = 1 - emax для всех форматов IEEE 754.

Формат включает:

  • Конечные числа, которые можно описать тремя целыми числами: s  = знак (ноль или единица), c  = значащая величина (или коэффициент ), имеющая не более p цифр при записи по основанию b (т. Е. Целое число в диапазоне от 0 до 0). to b p  - 1), и q  = показатель такой, что eminq  +  p  - 1 ≤ emax . Числовое значение такого конечного числа равно (−1) s × c × b q . [а]Кроме того, есть два нулевых значения, называемые нулями со знаком: бит знака определяет, равен ли ноль +0 (положительный ноль) или -0 (отрицательный ноль).
  • Две бесконечности: + ∞ и −∞.
  • Два вида NaN (не числа): тихий NaN (qNaN) и сигнальный NaN (sNaN).

Например, если b = 10, p = 7 и emax = 96, то emin = −95, мантисса удовлетворяет 0 ≤ c9 999 999 , а показатель степени удовлетворяет условию −101 ≤ q ≤ 90. Следовательно, наименьшее ненулевое положительное число, которое может быть представлено, равно 1 × 10 −101 , а наибольшее - 9999999 × 10 90 (9,999999 × 10 96 ), поэтому полный диапазон чисел составляет от -9,999999 × 10 96 до 9,999999 × 10 96 . Числа - b 1− emax и b 1− emax (здесь −1 × 10 −95 и 1 × 10 −95 ) - наименьшие (по величине) нормальные числа ; ненулевые числа между этими наименьшими числами называются субнормальными числами.

Представление и кодирование в памяти [ править ]

Некоторые числа могут иметь несколько возможных представлений в экспоненциальном формате. Например, если b  = 10 и p  = 7, то −12,345 может быть представлено как −12345 × 10 −3 , −123450 × 10 −4 и −1234500 × 10 −5 . Однако для большинства операций, таких как арифметические операции, результат (значение) не зависит от представления входных данных.

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

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

Из-за возможности множественного кодирования (по крайней мере, в форматах, называемых форматами обмена ), NaN может нести другую информацию: знаковый бит (который не имеет значения, но может использоваться некоторыми операциями) и полезную нагрузку , которая предназначена для диагностики. информация, указывающая на источник NaN (но полезная нагрузка может иметь другое использование, например, NaN-бокс [8] [9] [10] ).

Основные и обменные форматы [ править ]

Стандарт определяет пять основных форматов, названных по их числовой базе и количеству битов, используемых при их обменном кодировании. Существует три основных двоичных формата с плавающей запятой (с 32-, 64- или 128-битной кодировкой) и два основных десятичных формата с плавающей запятой (с 64- или 128-битной кодировкой). В binary32 и binary64 форматах являются одиночными и двойными форматами IEEE 754-1985 соответственно. Соответствующая реализация должна полностью реализовывать хотя бы один из основных форматов.

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

Обратите внимание, что в приведенной выше таблице минимальные показатели указаны для нормальных чисел; специальное представление субнормальных чисел позволяет представлять даже меньшие числа (с некоторой потерей точности). Например, наименьшее положительное число, которое может быть представлено в двоичном формате 64, равно 2 −1074 ; вклады в фигуру -1074 включают значение E min -1022 и все, кроме одного, из 53 битов значащей (2 -1022 - (53-1)  = 2 -1074 ).

Десятичные цифры - это цифры × log 10 по основанию . Это дает приблизительную точность в количестве десятичных цифр.

Десятичный E max равен Emax × log 10 по основанию . Это дает приблизительное значение максимального десятичного показателя степени.

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

Точность binary32 и binary64 в диапазоне от 10 −12 до 10 12


Пример макета для 32-битной плавающей запятой :

и 64-битный макет аналогичен .

Расширенные и расширяемые форматы точности [ править ]

Стандарт определяет необязательные расширенные и расширяемые форматы точности, которые обеспечивают большую точность, чем базовые форматы. [13] Формат повышенной точности расширяет базовый формат за счет большей точности и большего диапазона экспонент. Расширяемый формат точности позволяет пользователю определять точность и диапазон экспоненты. Реализация может использовать любое внутреннее представление, выбранное для таких форматов; все, что необходимо определить, - это его параметры ( b , p и emax ). Эти параметры однозначно описывают набор конечных чисел (комбинации знака, значащей и экспоненты для данного основания системы счисления), которые он может представлять.

Стандарт рекомендует, чтобы языковые стандарты обеспечивали метод определения p и emax для каждой поддерживаемой базы b . [14] Стандарт рекомендует, чтобы языковые стандарты и реализации поддерживали расширенный формат, который имеет большую точность, чем самый большой базовый формат, поддерживаемый для каждого основания b . [15] Для расширенного формата с точностью между двумя основными форматами диапазон экспоненты должен быть таким же большим, как и у следующего более широкого базового формата. Так, например, 64-битное двоичное число с расширенной точностью должно иметь emax не менее 16383. 80-битный расширенный формат x87 соответствует этому требованию.

Форматы обмена [ править ]

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

Двоичный [ править ]

Для обмена двоичными числами с плавающей запятой определены форматы обмена длиной 16 бит, 32 бита, 64 бита и любое кратное 32 бит ≥ 128 [c] . 16-битный формат предназначен для обмена или хранения небольших чисел (например, для графики).

Кодирующая схема для этих бинарных форматов обмена такой же , как и IEEE 754-1985: бит знака, а затем ш показателя бит , которые описывают показатель степени смещения с помощью смещения , а р  - 1 бит , которые описывают мантиссу. Ширина поля экспоненты для k- битного формата вычисляется как w  = round (4 log 2 ( k )) - 13. Существующие 64- и 128-битные форматы следуют этому правилу, но 16- и 32-битные форматы имеют больше битов экспоненты (5 и 8 соответственно), чем дает эта формула (3 и 7 соответственно).

Как и в стандарте IEEE 754-1985, поле смещенной экспоненты заполняется всеми 1 битами, чтобы указать либо бесконечность (конечное поле значимости = 0), либо NaN (конечное поле значимости ≠ 0). Для NaN, тихие NaN и сигнальные NaN различаются исключительно использованием самого старшего бита конечного поля значимой [d], а полезная нагрузка переносится в оставшихся битах.

Десятичный [ править ]

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

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

Правила округления [ править ]

Стандарт определяет пять правил округления. Первые два правила округляются до ближайшего значения; остальные называются направленными округлениями :

Округление до ближайшего [ править ]

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

Направленные округления [ править ]

  • Округление в сторону 0  - направленное округление в сторону нуля (также известное как усечение ).
  • Округление в сторону + ∞  - направленное округление в сторону положительной бесконечности (также известное как округление вверх или потолок ).
  • Округление в сторону −∞  - направленное округление в сторону отрицательной бесконечности (также известное как округление вниз или пол ).

Если не указано иное, результат операции с плавающей запятой определяется путем применения функции округления к бесконечно точному (математическому) результату. Такая операция называется правильно округленной . Это требование называется правильным округлением . [16]

Необходимые операции [ править ]

Обязательные операции для поддерживаемого арифметического формата (включая основные форматы) включают:

  • Арифметические операции (сложение, вычитание, умножение, деление, извлечение квадратного корня, объединенное умножение – сложение , остаток) [17] [18]
  • Преобразования (между форматами, в и из строк и т. Д. ) [19] [20]
  • Масштабирование и (для десятичных) квантование [21] [22]
  • Копирование и изменение знака (абс, отрицание и т. Д. ) [23]
  • Сравнения и общий заказ [24] [25]
  • Классификация и тестирование NaN и т. Д. [26]
  • Тестирование и установка флагов [27]
  • Разные операции. [ указать ]

Предикаты сравнения [ править ]

Стандарт предоставляет предикаты сравнения для сравнения одного элемента данных с плавающей запятой с другим в поддерживаемом арифметическом формате. [28] Любое сравнение с NaN считается неупорядоченным. −0 и +0 сравниваются как равные.

Предикат общего порядка [ править ]

Стандарт предоставляет предикат totalOrder , который определяет общий порядок канонических элементов поддерживаемого арифметического формата. [29] Предикат согласуется с предикатами сравнения, когда одно число с плавающей запятой меньше другого. TotalOrder предикат не налагает полный порядок на все кодировки в формате. В частности, он не делает различий между разными кодировками одного и того же представления с плавающей запятой, как когда одна или обе кодировки являются неканоническими. [30] IEEE 754-2019 включает пояснения к totalOrder .

Обработка исключений [ править ]

Стандарт определяет пять исключений, каждое из которых возвращает значение по умолчанию и имеет соответствующий флаг состояния, который поднимается при возникновении исключения. [e] Никакой другой обработки исключений не требуется, но рекомендуются дополнительные альтернативы не по умолчанию (см. § Альтернативная обработка исключений ).

Пять возможных исключений:

  • Недопустимая операция: математически не определено, например , квадратный корень из отрицательного числа. По умолчанию возвращает qNaN.
  • Деление на ноль: операция с конечными операндами дает точный бесконечный результат, например 1/0 или log (0). По умолчанию возвращает ± бесконечность.
  • Переполнение: результат слишком велик для правильного представления ( т. Е. Его показатель степени с неограниченным диапазоном показателей будет больше, чем emax ). По умолчанию возвращает ± бесконечность для режимов округления до ближайшего (и следует правилам округления для режимов направленного округления).
  • Недополнение: результат очень мал (вне нормального диапазона) и неточен. По умолчанию возвращает субнормальное значение или ноль (в соответствии с правилами округления).
  • Неточность: точный ( т. Е. Неокругленный) результат не представляется точно. По умолчанию возвращает правильно округленный результат.

Это те же пять исключений, которые определены в IEEE 754-1985, но исключение деления на ноль было распространено на операции, отличные от деления.

Для десятичных чисел с плавающей запятой существуют дополнительные исключения: [31] [32]

  • Фиксировано: показатель степени результата слишком велик для формата назначения. По умолчанию к коэффициенту добавляются завершающие нули, чтобы уменьшить показатель степени до наибольшего полезного значения. Если это невозможно (потому что это приведет к тому, что количество цифр должно быть больше, чем формат назначения), возникает исключение переполнения.
  • Округлено: для коэффициента результата требуется больше цифр, чем предоставляет формат назначения. Если отбрасываются любые ненулевые цифры, сигнализируется неточное исключение.

Кроме того, такие операции, как квантование, когда один из операндов бесконечен или когда результат не соответствует формату назначения, также будут сигнализировать об исключении недопустимой операции. [33]

Рекомендации [ править ]

Альтернативная обработка исключений [ править ]

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

Рекомендуемые операции [ править ]

В разделе 9 стандарта рекомендуются дополнительные математические операции [34], которые должны быть определены языковыми стандартами. [35] Для соответствия стандарту ничего не требуется.

Рекомендуемые арифметические операции, которые должны правильно округляться: [36]

  • e x {\displaystyle e^{x}} , ,
  • e x − 1 {\displaystyle e^{x}-1} , ,
  • ln ⁡ x {\displaystyle \ln x} , , log 2 ⁡ x {\displaystyle \log _{2}x} log 10 ⁡ x {\displaystyle \log _{10}x}
  • ln ⁡ ( 1 + x ) {\displaystyle \ln(1+x)} , ,
  • x 2 + y 2 {\displaystyle {\sqrt {x^{2}+y^{2}}}}
  • x {\displaystyle {\sqrt {x}}}
  • x 1 n {\displaystyle x^{\frac {1}{n}}}
  • x n {\displaystyle x^{n}} , x y {\displaystyle x^{y}}
  • sin ⁡ x {\displaystyle \sin x} , , cos ⁡ x {\displaystyle \cos x} tan ⁡ x {\displaystyle \tan x}
  • arcsin ⁡ x {\displaystyle \arcsin x} , , , arccos ⁡ x {\displaystyle \arccos x} arctan ⁡ x {\displaystyle \arctan x} atan2 ⁡ ( y , x ) {\displaystyle \operatorname {atan2} (y,x)}
  • , , (Смотри также: кратные П )
  • , , , (Смотри также: кратные П )
  • sinh ⁡ x {\displaystyle \sinh x} , , cosh ⁡ x {\displaystyle \cosh x} tanh ⁡ x {\displaystyle \tanh x}
  • arsinh ⁡ x {\displaystyle \operatorname {arsinh} x} , , arcosh ⁡ x {\displaystyle \operatorname {arcosh} x} artanh ⁡ x {\displaystyle \operatorname {artanh} x}

Функции asinPi , acosPi и tanPi не входили в стандарт IEEE 754-2008, поскольку считались менее необходимыми. [37] Были упомянуты asinPi , acosPi , но это было расценено как ошибка. [4] Все три были добавлены в редакцию 2019 года.

К рекомендуемым операциям также относятся установка и доступ к направлению округления в динамическом режиме [38], а также операции уменьшения вектора, определенные реализацией, такие как сумма, масштабируемое произведение и скалярное произведение , точность которых не указана стандартом. [39]

С 2019 года также рекомендуются расширенные арифметические операции [40] для двоичных форматов. Эти операции, указанные для сложения, вычитания и умножения, производят пару значений, состоящую из результата, правильно округленного до ближайшего в формате, и члена ошибки, который можно точно представить в этом формате. На момент публикации стандарта аппаратные реализации не были известны, но очень похожие операции уже были реализованы в программном обеспечении с использованием хорошо известных алгоритмов. История и мотивация их стандартизации объясняются в справочном документе. [41] [42]

По состоянию на 2019 год ранее необходимые minNum, maxNum, minNumMag и maxNumMag в IEEE 754-2008 теперь удалены из-за их неассоциативности. Вместо этого рекомендуются два набора новых минимальных и максимальных операций [43] . Первый набор содержит минимум, минимум, максимум и максимум . Второй набор содержит minimumMagnitude, minimumMagnitudeNumber, maximumMagnitude и maximumMagnitudeNumber . История и мотивация этого изменения объясняются в справочном документе. [44]

Оценка выражения [ править ]

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

Языки программирования должны позволять пользователю указывать минимальную точность для промежуточных вычислений выражений для каждого основания. В стандарте это называется «предпочтительной шириной», и должна быть возможность устанавливать ее для каждого блока. Промежуточные вычисления в выражениях должны быть рассчитаны, а любые временные значения должны быть сохранены с использованием максимальной ширины операндов и предпочтительной ширины, если она установлена. Таким образом, например, компилятор, ориентированный на оборудование с плавающей запятой x87, должен иметь средства указания того, что промежуточные вычисления должны использовать формат с двойным расширением . Сохраненное значение переменной должно всегда использоваться при вычислении последующих выражений, а не любого предшественника до округления и присвоения переменной.

Воспроизводимость [ править ]

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

Представление персонажа [ править ]

Стандарт требует операций для преобразования между базовыми форматами и внешними форматами последовательности символов . [45] Преобразование в формат десятичных символов и обратно требуется для всех форматов. Преобразование во внешнюю последовательность символов должно быть таким, чтобы обратное преобразование с округлением до четного восстановило исходное число. Нет требования сохранять полезную нагрузку тихого NaN или сигнального NaN, а преобразование из внешней последовательности символов может превратить сигнальный NaN в тихий NaN.

Исходное двоичное значение будет сохранено путем преобразования в десятичное и обратно с использованием: [46]

  • 5 десятичных цифр для двоичного16,
  • 9 десятичных цифр для binary32,
  • 17 десятичных цифр для binary64,
  • 36 десятичных цифр для двоичного 128.

Для других двоичных форматов необходимое количество десятичных цифр равно

где p - количество значащих битов в двоичном формате, например, 237 бит для двоичного256.

(Примечание: в качестве ограничения реализации правильное округление гарантируется только для количества десятичных цифр выше плюс 3 для наибольшего поддерживаемого двоичного формата. Например, если binary32 является наибольшим поддерживаемым двоичным форматом, то преобразование из десятичной внешней последовательности с 12 десятичных цифр гарантированно будут правильно округлены при преобразовании в binary32; но преобразование последовательности из 13 десятичных цифр - нет; однако стандарт рекомендует, чтобы реализации не налагали такого ограничения.)

При использовании десятичного формата с плавающей запятой десятичное представление будет сохранено с использованием:

  • 7 десятичных цифр для decimal32,
  • 16 десятичных цифр для decimal64,
  • 34 десятичных цифры для decimal 128.

Алгоритмы с кодом для корректного преобразования из двоичного в десятичное и из десятичного в двоичное обсуждают Гей [47], а для тестирования - Паксон и Кахан. [48]

См. Также [ править ]

  • bfloat16 формат с плавающей запятой
  • Binade
  • Сопроцессор
  • C99 для примеров кода, демонстрирующих доступ и использование функций IEEE 754.
  • Арифметика с плавающей запятой для истории, обоснования дизайна и примера использования функций IEEE 754.
  • Арифметика с фиксированной точкой для альтернативного подхода к вычислениям с рациональными числами (особенно полезно, когда диапазон экспоненты известен, фиксирован или ограничен во время компиляции).
  • IBM System z9 , первый процессор, реализующий десятичную арифметику IEEE 754-2008 (с использованием аппаратного микрокода).
  • IBM z10 , IBM z196 , IBM zEC12 и IBM z13 - процессоры, которые полностью аппаратно реализуют десятичную арифметику IEEE 754-2008.
  • ISO / IEC 10967 , Арифметика , не зависящая от языка (LIA).
  • Minifloat , двоичные форматы с плавающей запятой низкой точности, соответствующие принципам IEEE 754.
  • Процессоры POWER6 , POWER7 и POWER8, которые полностью аппаратно реализуют десятичную арифметику IEEE 754-2008.
  • strictfp , ключевое слово в языке программирования Java , ограничивающее арифметические операции до одинарной и двойной точности IEEE 754, чтобы обеспечить воспроизводимость на обычных аппаратных платформах.
  • Дилемма изготовителя стола для получения дополнительной информации о правильном округлении функций.
  • Стандартная среда Apple Numerics
  • Коническая плавающая точка

Примечания [ править ]

  1. ^ Например, если основание равно 10, знак равен 1 (обозначает отрицательное значение), мантисса равна 12345, а показатель степени равен −3, тогда значение числа будет (−1) 1 × 12345 × 10 −3 = −1 × 12345 × 0,001 = −12,345.
  2. ^ включая неявный бит (который всегда равен 1 для нормальных чисел и 0 для субнормальных чисел. Этот неявный бит не сохраняется в памяти), но не знаковый бит.
  3. ^ В отличие от десятичного, двоичного формата обмена длиной 96 бит не существует. Однако такой формат все еще разрешен как формат без обмена.
  4. ^ Стандарт рекомендует 0 для сигнализации NaN, 1 для тихих NaN, так что сигнализация NaN может быть заморожена путем изменения только этого бита на 1, в то время как обратное может привести к кодированию бесконечности.
  5. ^ В некоторых случаях недостаточного заполнения флаг не поднимается.

Ссылки [ править ]

  1. ^ IEEE 754 2019
  2. ^ «FW: ISO / IEC / IEEE 60559 (IEEE Std 754-2008)» . grouper.ieee.org . Архивировано из оригинала на 2017-10-27 . Проверено 4 апреля 2018 .
  3. ^ «ISO / IEC / IEEE 60559: 2011 - Информационные технологии - Микропроцессорные системы - Арифметика с плавающей запятой» . www.iso.org . Проверено 4 апреля 2018 .
  4. ^ a b Коулишоу, Майк (13 ноября 2013 г.). «Опечатки IEEE 754-2008» . speleotrove.com . Проверено 24 января 2020 .
  5. ^ «Пересмотр ANSI / IEEE Std 754-2008» . ucbtest.org . Проверено 4 апреля 2018 .
  6. ^ «ISO / IEC 60559: 2020 - Информационные технологии - Микропроцессорные системы - Арифметика с плавающей точкой» . www.iso.org . Проверено 25 октября 2020 .
  7. ^ IEEE 754 2008 , §2.1.27.
  8. ^ "SpiderMonkey Internals" . developer.mozilla.org . Проверено 11 марта 2018 .
  9. ^ Клеменс, Бен (сентябрь 2014). 21-й век C: C Советы от новой школы . O'Reilly Media, Incorporated. п. 160. ISBN 9781491904442. Проверено 11 марта 2018 .
  10. ^ "zuiderkwast / nanbox: NaN-бокс в C" . GitHub . Проверено 11 марта 2018 .
  11. ^ IEEE 754 2008 , §3.6.
  12. ^ Cowlishaw, Майк. «Десятичные арифметические кодировки» (PDF) . IBM . Проверено 6 августа 2015 .
  13. ^ IEEE 754 2008 , §3.7.
  14. ^ IEEE 754 2008 , §3.7 утверждает: «Языковые стандарты должны определять механизмы, поддерживающие расширяемую точность для каждого поддерживаемого основания».
  15. ^ IEEE 754 2008 , §3.7 гласит: «Языковые стандарты или реализации должны поддерживать формат с расширенной точностью, который расширяет самый широкий базовый формат, поддерживаемый в этой системе счисления».
  16. ^ IEEE 754 2019 , §2.1
  17. ^ IEEE 754 2008 , §5.3.1
  18. ^ IEEE 754 2008 , §5.4.1
  19. ^ IEEE 754 2008 , §5.4.2
  20. ^ IEEE 754 2008 , §5.4.3
  21. ^ IEEE 754 2008 , §5.3.2
  22. ^ IEEE 754 2008 , §5.3.3
  23. ^ IEEE 754 2008 , §5.5.1
  24. ^ IEEE 754 2008 , §5.10
  25. ^ IEEE 754 2008 , §5.11
  26. ^ IEEE 754 2008 , §5.7.2
  27. ^ IEEE 754 2008 , §5.7.4
  28. ^ IEEE 754 2019 , §5.11
  29. ^ IEEE 754 2019 , §5.10
  30. ^ IEEE 754 2019 , §5.10
  31. ^ «9.4. Decimal - Десятичная арифметика с фиксированной и плавающей запятой - документация Python 3.6.5» . docs.python.org . Проверено 4 апреля 2018 .
  32. ^ «Десятичная арифметика - исключительные условия» . speleotrove.com . Проверено 4 апреля 2018 .
  33. ^ IEEE 754 2008 , §7.2 (h)
  34. ^ IEEE 754 2019 , §9.2
  35. ^ IEEE 754 2008 , пункт 9
  36. ^ IEEE 754 2019 , §9.2.
  37. ^ "Re: Отсутствуют функции tanPi, asinPi и acosPi" . grouper.ieee.org . Архивировано из оригинала на 2017-07-06 . Проверено 4 апреля 2018 .
  38. ^ IEEE 754 2008 , §9.3.
  39. ^ IEEE 754 2008 , §9.4.
  40. ^ IEEE 754 2019 , §9.5.
  41. ^ Риди, Джейсон; Деммель, Джеймс. «Расширенные арифметические операции, предлагаемые для IEEE-754 2018» (PDF) . 25-я конференция IEEE Symbosium по компьютерной арифметике (ARITH 2018). С. 49–56. Архивировано (PDF) из оригинала 23.07.2019 . Проверено 23 июля 2019 .
  42. ^ «Версия 754 намечена на 2019 год» . 754r.ucbtest.org . Проверено 23 июля 2019 .
  43. ^ IEEE 754 2019 , §9.6.
  44. ^ Чен, Дэвид. «Удаление операций MinNum и MaxNum из IEEE 754-2019» (PDF) . grouper.ieee.org . Проверено 5 февраля 2020 .
  45. ^ IEEE 754 2008 , §5.12.
  46. ^ IEEE 754 2008 , §5.12.2.
  47. ^ Гей, Дэвид М. (1990-11-30). «Правильно округленные двоично-десятичные и десятично-двоичные преобразования» . Рукопись численного анализа. Мерри Хилл, Нью-Джерси, США: AT&T Laboratories. 90-10. Cite journal requires |journal= (help)
  48. ^ Паксон, Верн; Кахан, Уильям (1991-05-22). «Программа для тестирования десятичного-двоичного преобразования IEEE». Рукопись. CiteSeerX 10.1.1.144.5889 .  Cite journal requires |journal= (help)

Стандарты [ править ]

  • Компьютерное общество IEEE (29 августа 2008 г.). Стандарт IEEE для арифметики с плавающей запятой . IEEE STD 754-2008 . IEEE. С. 1–70. DOI : 10.1109 / IEEESTD.2008.4610935 . ISBN 978-0-7381-5753-5. IEEE Std 754-2008.
  • IEEE Computer Society (22.07.2019). Стандарт IEEE для арифметики с плавающей запятой . IEEE STD 754-2019 . IEEE. С. 1–84. DOI : 10.1109 / IEEESTD.2019.8766229 . ISBN 978-1-5044-5924-2. IEEE Std 754-2019.
  • ISO / IEC / IEEE 60559: 2011 - Информационные технологии - Микропроцессорные системы - Арифметика с плавающей запятой . Iso.org. Июнь 2011. С. 1–58.
  • ISO / IEC 60559: 2020 - Информационные технологии - Микропроцессорные системы - Арифметика с плавающей запятой . Iso.org. Май 2020. С. 1–74.

Вторичные ссылки [ править ]

  • Десятичная арифметика с плавающей запятой , ответы на часто задаваемые вопросы, библиография и ссылки
  • Сравнение двоичных чисел с плавающей запятой
  • Справочный материал IEEE 754
  • IEEE 854-1987  - История и протоколы
  • Дополнительные чтения для IEEE 754 . Включает исторические перспективы.

Дальнейшее чтение [ править ]

  • Голдберг, Дэвид (март 1991). «Что должен знать каждый компьютерный ученый об арифметике с плавающей точкой» . ACM Computing Surveys . 23 (1): 5–48. DOI : 10.1145 / 103162.103163 . S2CID  222008826 . Проверено 8 марта 2019 .
  • Хеккер, Крис (февраль 1996 г.). «Давайте перейдем к (плавающей) точке» (PDF) . Журнал разработчика игр : 19–24. ISSN  1073-922X .
  • Северанс, Чарльз (март 1998 г.). «IEEE 754: Интервью с Уильямом Каханом» (PDF) . Компьютер IEEE . 31 (3): 114–115. DOI : 10,1109 / MC.1998.660194 . S2CID  33291145 . Проверено 8 марта 2019 .
  • Коулишоу, Майк (июнь 2003 г.). «Десятичные числа с плавающей запятой: алгоритм для компьютеров». 16-й симпозиум IEEE по компьютерной арифметике, 2003 г. Труды (PDF) . Труды 16-го симпозиума IEEE по компьютерной арифметике . Лос-Аламитос, Калифорния: Компьютерное общество IEEE. С. 104–111. DOI : 10,1109 / ARITH.2003.1207666 . ISBN 978-0-7695-1894-7. S2CID  18713046 . Проверено 14 ноября 2014 .. (Примечание. Алгоризм - это не неправильное написание названия; см. Также алгоритм .)
  • Моннио, Дэвид (май 2008 г.). «Подводные камни проверки вычислений с плавающей запятой» . Транзакции ACM по языкам и системам программирования . 30 (3): 1–41. arXiv : cs / 0701192 . DOI : 10.1145 / 1353445.1353446 . ISSN  0164-0925 . S2CID  218578808 .: Краткое изложение неинтуитивного поведения операций с плавающей запятой на популярных архитектурах с последствиями для проверки и тестирования программ.
  • Мюллер, Жан-Мишель; Бруни, Николас; де Динешен, Флоран; Жаннерод, Клод-Пьер; Джолдес, Миоара; Лефевр, Винсент; Мелькионд, Гийом; Revol, Натали; Торрес, Серж (2018) [2010]. Справочник по арифметике с плавающей точкой (2-е изд.). Birkhäuser . DOI : 10.1007 / 978-3-319-76526-6 . ISBN 978-3-319-76525-9.
  • Овертон, Майкл Л. (2001). Написано в Институте математических наук Куранта , Нью-Йоркский университет , Нью-Йорк, США. Численные вычисления с использованием арифметики с плавающей запятой IEEE (1-е изд.). Филадельфия, США: SIAM . DOI : 10.1137 / 1.9780898718072 . ISBN 978-0-89871-482-1. 978-0-89871-571-2, 0-89871-571-7.
  • Клив Молер о числах с плавающей запятой
  • Биби, Нельсон Х.Ф. (22.08.2017). Справочник по математическим функциям - Программирование с использованием переносимой программной библиотеки MathCW (1-е изд.). Солт-Лейк-Сити, Юта, США: Springer International Publishing AG . DOI : 10.1007 / 978-3-319-64110-2 . ISBN 978-3-319-64109-6. LCCN  2017947446 . S2CID  30244721 .
  • Хаф, Дэвид Г. (декабрь 2019 г.). «Стандарт IEEE 754: один для книг по истории» . Компьютер . IEEE . 52 (12): 109–112. DOI : 10,1109 / MC.2019.2926614 . S2CID  208281213 .

Внешние ссылки [ править ]

  • Страницы IEEE: 754-1985 - Стандарт IEEE для двоичной арифметики с плавающей запятой , 754-2008 - Стандарт IEEE для арифметики с плавающей запятой , 754-2019 - Стандарт IEEE для арифметики с плавающей запятой
  • Бинарные калькуляторы IEEE 754 онлайн