ИЭЭЭ 754
с плавающей запятой Форматы |
---|
ИЭЭЭ 754 |
|
Другой |
Альтернативы |
Стандарт IEEE для арифметики с плавающей запятой ( IEEE 754 ) — это технический стандарт для арифметики с плавающей запятой, установленный в 1985 году Институтом инженеров по электротехнике и электронике (IEEE). В стандарте решены многие проблемы, обнаруженные в различных реализациях операций с плавающей запятой, которые затрудняют их надежное и переносимое использование . Многие аппаратные устройства с плавающей запятой используют стандарт IEEE 754.
Стандарт определяет:
- арифметические форматы: наборы двоичных и десятичных данных с плавающей запятой, которые состоят из конечных чисел (включая нули со знаком и субнормальные числа ), бесконечностей и специальных значений «не числа» ( NaNs ).
- форматы обмена: кодировки (битовые строки), которые можно использовать для обмена данными с плавающей запятой в эффективной и компактной форме.
- правила округления: свойства, которые должны соблюдаться при округлении чисел во время арифметических операций и преобразований.
- операции: арифметические и другие операции (например, тригонометрические функции ) над арифметическими форматами.
- обработка исключений: индикация исключительных условий (таких как деление на ноль , переполнение и т.д. )
IEEE 754-2008 , опубликованный в августе 2008 года, включает почти весь исходный стандарт IEEE 754-1985 , а также стандарт IEEE 854-1987 для независимой от системы счисления арифметики с плавающей запятой . Текущая версия IEEE 754-2019 была опубликована в июле 2019 года. [ 1 ] Это незначительная доработка предыдущей версии, включающая в себя в основном уточнения, исправления дефектов и новые рекомендуемые операции.
История
[ редактировать ]Потребность в стандарте операций с плавающей запятой возникла из-за хаоса в индустрии бизнеса и научных вычислений в 1960-х и 1970-х годах. IBM использовала шестнадцатеричный формат с плавающей запятой с более длинным мантиссом и более коротким показателем степени. [ нужны разъяснения ] . CDC и Cray Компьютеры использовали представление дополнения , которое допускает значения +0 и -0. 60-битные компьютеры CDC не имели полных 60-битных сумматоров, поэтому целочисленная арифметика была ограничена 48 битами точности от блока с плавающей запятой. Обработка исключений от деления на ноль была разной на разных компьютерах. Перемещение данных между системами и даже повторение одних и тех же вычислений в разных системах зачастую было затруднительно.
Первый стандарт IEEE для арифметики с плавающей запятой, IEEE 754-1985 , был опубликован в 1985 году. Он охватывал только двоичную арифметику с плавающей запятой.
Новая версия, IEEE 754-2008 , была опубликована в августе 2008 года после семилетнего процесса пересмотра под председательством Дэна Зураса и под редакцией Майка Коулишоу . Он заменил как IEEE 754-1985 (двоичная арифметика с плавающей запятой), так и стандарт IEEE 854-1987 для независимой от основания арифметики с плавающей запятой . Двоичные форматы исходного стандарта включены в этот новый стандарт вместе с тремя новыми базовыми форматами: одним двоичным и двумя десятичными. Чтобы соответствовать текущему стандарту, реализация должна реализовать хотя бы один из базовых форматов как арифметический формат, так и формат обмена.
Международный стандарт ISO/IEC/IEEE 60559:2011 (содержание идентично IEEE 754-2008) одобрен для принятия через ISO / IEC JTC 1 /SC 25 в соответствии с Соглашением ISO/IEEE PSDO. [ 2 ] [ 3 ] и опубликовано. [ 4 ]
Текущая версия IEEE 754-2019, опубликованная в июле 2019 года, основана на IEEE 754-2008 и заменяет ее после процесса пересмотра, начатого в сентябре 2015 года под председательством Дэвида Г. Хафа и под редакцией Майка Коулишоу. Он включает в себя в основном пояснения (например, totalOrder ) и исправления дефектов (например, minNum ), но также включает некоторые новые рекомендуемые операции (например, augmentedAddition ). [ 5 ] [ 6 ]
Международный стандарт ISO/IEC 60559:2020 (с содержанием, идентичным IEEE 754-2019) был одобрен для принятия через ISO/IEC JTC 1 /SC 25 и опубликован. [ 7 ]
Следующая прогнозируемая редакция стандарта запланирована на 2028 год. [ 8 ]
Форматы
[ редактировать ]IEEE 754 Формат — это «набор представлений числовых значений и символов». Формат может также включать способ кодирования набора. [ 9 ]
Формат с плавающей запятой определяется
- основание (также называемое системой счисления ) b , которое в IEEE 754 равно 2 (двоичному) или 10 (десятичному);
- точность p ;
- диапазон показателя степени от emin до emax , где emin = 1 − emax или, что эквивалентно, emin = − ( emax − 1) для всех форматов IEEE 754.
Формат включает в себя
- Конечные числа, которые можно описать тремя целыми числами: s = знак (ноль или единица), c = мантисса (или коэффициент ), имеющий не более p цифр при записи в системе счисления b (т. е. целое число в диапазоне до 0). б п − 1), а q = показатель степени такой, что emin ⩽ q + p − 1 ⩽ emax . Числовое значение такого конечного числа равно (−1) с × в × б д . [ а ] Кроме того, существуют два нулевых значения, называемые нулями со знаком : бит знака определяет, равен ли ноль +0 (положительный ноль) или -0 (отрицательный ноль).
- Две бесконечности: +∞ и −∞.
- Существует два типа NaN (не-числа): тихий NaN (qNaN) и сигнальный NaN (sNaN).
Например, если b = 10, p = 7 и emax = 96, то emin = −95, мантисса удовлетворяет условиям 0 ≤ c ≤ 9 999 999 , а показатель степени удовлетворяет условиям −101 ≤ q ≤ 90 . Следовательно, наименьшее ненулевое положительное число, которое можно представить, равно 1×10. −101 , а самый большой — 9999999×10. 90 (9.999999×10 96 ), поэтому полный диапазон чисел равен −9,999999×10. 96 через 9,999999×10 96 . Числа — б 1- емакс и б 1- емакс (здесь −1×10 −95 и 1×10 −95 ) — наименьшие (по величине) нормальные числа ; ненулевые числа между этими наименьшими числами называются субнормальными числами .
Представление и кодирование в памяти
[ редактировать ]Некоторые числа могут иметь несколько возможных представлений с плавающей запятой. Например, если b = 10 и p = 7, то -12,345 можно представить как -12345×10. −3 , −123450×10 −4 , и -1234500×10 −5 . Однако для большинства операций, таких как арифметические операции, результат (значение) не зависит от представления входных данных.
Для десятичных форматов допустимо любое представление, и набор этих представлений называется когортой . Когда результат может иметь несколько представлений, стандарт определяет, какой член когорты выбирается.
Для двоичных форматов представление делается уникальным путем выбора наименьшего представимого показателя степени, позволяющего точно представить значение. Кроме того, показатель степени не представляется напрямую, но добавляется смещение , так что наименьший представимый показатель степени представляется как 1, а 0 используется для субнормальных чисел. Для чисел с показателем степени в нормальном диапазоне (поле показателя не состоит ни из единиц, ни из нулей) старший бит мантиссы всегда будет равен 1. Следовательно, ведущая 1 может подразумеваться, а не присутствовать явно в кодировке памяти. и согласно стандарту явно представленная часть мантиссы будет лежать между 0 и 1. Это правило называется соглашением о ведущих битах , неявным соглашением битов или соглашением скрытых битов . Это правило позволяет двоичному формату иметь дополнительную точность. Соглашение о ведущих битах не может использоваться для субнормальных чисел, поскольку они имеют показатель степени, выходящий за пределы нормального диапазона показателя степени, и масштабируются по наименьшему представленному показателю, используемому для наименьших нормальных чисел.
Из-за возможности множественного кодирования (по крайней мере, в форматах, называемых форматами обмена ), NaN может нести другую информацию: знаковый бит (который не имеет значения, но может использоваться некоторыми операциями) и полезную нагрузку , которая предназначена для диагностики. информация, указывающая источник NaN (но полезная нагрузка может иметь и другие применения, например NaN-бокс). [ 10 ] [ 11 ] [ 12 ] ).
Базовые и обменные форматы
[ редактировать ]Стандарт определяет пять основных форматов, названных в честь их числовой базы и количества битов, используемых в их кодировании обмена. Существует три основных формата двоичных чисел с плавающей запятой (закодированных 32, 64 или 128 битами) и два базовых формата десятичных чисел с плавающей запятой (закодированных 64 или 128 битами). Форматы двоичный32 и двоичный64 представляют собой одинарный и двойной форматы IEEE 754-1985 соответственно. Соответствующая реализация должна полностью реализовывать хотя бы один из базовых форматов.
Стандарт также определяет форматы обмена , которые обобщают эти базовые форматы. [ 13 ] Для двоичных форматов требуется соглашение о ведущих битах. В следующей таблице приведены некоторые возможные форматы обмена (включая базовые форматы).
Значение | Экспонента | Характеристики [ б ] | |||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
Имя | Общее имя | Радикс | Цифры [ с ] | Десятичные цифры [ д ] | Мин | Макс | МАКСВАЛ | войти 10 МАКСВАЛ | MINVAL >0 (normal) | МИНВАЛ >0 (субнорма) | Примечания |
двоичный16 | Половинная точность | 2 | 11 | 3.31 | −14 | 15 | 65504 | 4.816 | 6.10·10 −5 | 5.96·10 −8 | Развязка |
двоичный32 | Одинарная точность | 2 | 24 | 7.22 | −126 | +127 | 3.40·10 38 | 38.532 | 1.18·10 −38 | 1.40·10 −45 | Базовый |
двоичный64 | Двойная точность | 2 | 53 | 15.95 | −1022 | +1023 | 1.80·10 308 | 308.255 | 2.23·10 −308 | 4.94·10 −324 | Базовый |
двоичный128 | Четырехкратная точность | 2 | 113 | 34.02 | −16382 | +16383 | 1.19·10 4932 | 4932.075 | 3.36·10 −4932 | 6.48·10 −4966 | Базовый |
двоичный256 | Восьмеричная точность | 2 | 237 | 71.34 | −262142 | +262143 | 1.61·10 78913 | 78913.207 | 2.48·10 −78913 | 2.25·10 −78984 | Развязка |
десятичное32 | 10 | 7 | 7 | −95 | +96 | 1.0·10 97 | 97 − 4.34·10 −8 | 1·10 −95 | 1·10 −101 | Развязка | |
десятичная дробь64 | 10 | 16 | 16 | −383 | +384 | 1.0·10 385 | 385 − 4.34·10 −17 | 1·10 −383 | 1·10 −398 | Базовый | |
десятичное128 | 10 | 34 | 34 | −6143 | +6144 | 1.0·10 6145 | 6145 − 4.34·10 −35 | 1·10 −6143 | 1·10 −6176 | Базовый |
В таблице выше целочисленные значения являются точными, тогда как значения в десятичной записи (например, 1,0) являются округленными значениями. Указанные минимальные показатели степени относятся к обычным числам; специальное представление субнормальных чисел позволяет представлять даже меньшие (по величине) числа с некоторой потерей точности. Например, наименьшее положительное число, которое можно представить в двоичном формате 64, равно 2. −1074 ; вклады в цифру -1074 включают значение emin -1022 и все 53 бита значащего значения, кроме одного (2 −1022 − (53 − 1) = 2 −1074 ).
Десятичные цифры — это точность формата, выраженная в эквивалентном количестве десятичных цифр. Оно вычисляется как цифры × log 10 по основанию . Например, двоичный128 имеет примерно ту же точность, что и 34-значное десятичное число.
log 10 MAXVAL — это мера диапазона кодирования. Его целая часть — это наибольший показатель степени, отображаемый на выходе значения в экспоненциальном представлении с одной ведущей цифрой в мантиссе перед десятичной запятой (например, 1,698 · 10 38 находится рядом с наибольшим значением в двоичном формате32, 9,999999 · 10 96 — наибольшее значение в десятичном формате32).
Форматы двоичный32 (одинарный) и двоичный64 (двойной) являются двумя наиболее распространенными форматами, используемыми сегодня. На рисунке ниже показана абсолютная точность для обоих форматов в диапазоне значений. Этот рисунок можно использовать для выбора подходящего формата с учетом ожидаемого значения числа и требуемой точности.
Пример макета для 32-битной плавающей запятой :
и 64-битная раскладка аналогична.
Расширенные и расширяемые прецизионные форматы
[ редактировать ]Стандарт определяет дополнительные расширенные и расширяемые форматы точности, которые обеспечивают большую точность, чем базовые форматы. [ 14 ] Формат расширенной точности расширяет базовый формат за счет большей точности и большего диапазона показателей. Расширяемый формат точности позволяет пользователю указывать диапазон точности и показателя степени. Реализация может использовать любое внутреннее представление, которое она выберет для таких форматов; все, что необходимо определить, — это его параметры ( b , p и emax ). Эти параметры однозначно описывают набор конечных чисел (комбинаций знака, мантиссы и показателя степени для данного основания), которые он может представлять.
Стандарт рекомендует, чтобы языковые стандарты предоставляли метод указания p и emax для каждой поддерживаемой базы b . [ 15 ] Стандарт рекомендует, чтобы языковые стандарты и реализации поддерживали расширенный формат, который имеет большую точность, чем самый большой базовый формат, поддерживаемый для каждого основания счисления b . [ 16 ] Для расширенного формата с точностью между двумя базовыми форматами диапазон экспоненты должен быть таким же большим, как и у следующего более широкого базового формата. Так, например, 64-битное двоичное число расширенной точности должно иметь значение «emax» не менее 16383. x87 80-битный расширенный формат соответствует этому требованию.
Исходный стандарт IEEE 754-1985 также содержал концепцию расширенных форматов , но без какой-либо обязательной связи между emin и emax . Например, Motorola 68881 , 80-битный формат [ 17 ] где emin = − emax был соответствующим расширенным форматом, но стал несоответствующим в версии 2008 года.
Форматы обмена
[ редактировать ]Форматы обмена предназначены для обмена данными с плавающей запятой с использованием битовой строки фиксированной длины для данного формата.
Двоичный
[ редактировать ]Для обмена двоичными числами с плавающей запятой следует обмениваться форматами длиной 16 бит, 32 бита, 64 бита и любым кратным 32 битам ≥ 128. [ и ] определены. 16-битный формат предназначен для обмена или хранения небольших чисел (например, для графики).
Схема кодирования для этих форматов двоичного обмена такая же, как в IEEE 754-1985: бит знака, за которым следуют w битов экспоненты, которые описывают смещение экспоненты на смещение , и p - 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 различаются использованием исключительно старшего бита конечного поля мантиссы, [ ж ] а полезная нагрузка передается в оставшихся битах.
Десятичный
[ редактировать ]Для обмена десятичными числами с плавающей запятой определены форматы обмена, кратные 32 битам. Как и в случае двоичного обмена, схема кодирования десятичных форматов обмена кодирует знак, показатель степени и мантиссу. Определены две разные кодировки на уровне битов, и обмен осложняется тем, что может потребоваться некоторый внешний индикатор используемой кодировки.
Эти два параметра позволяют кодировать мантиссу как сжатую последовательность десятичных цифр с использованием плотно упакованных десятичных чисел или, альтернативно, как двоичное целое число . Первый более удобен для прямой аппаратной реализации стандарта, а второй больше подходит для программной эмуляции на бинарном компьютере. В любом случае набор чисел (комбинации знака, мантиссы и показателя степени), которые могут быть закодированы, идентичен, а специальные значения (±ноль с минимальным показателем, ±бесконечность, тихие NaN и сигнальные NaN) имеют идентичное кодирование.
Правила округления
[ редактировать ]Стандарт определяет пять правил округления. Первые два правила округляются до ближайшего значения; остальные называются направленными округлениями :
Округление до ближайшего
[ редактировать ]- Округление до ближайшего значения, привязка к четному – округление до ближайшего значения; если число попадает на полпути, оно округляется до ближайшего значения с четной младшей цифрой.
- Округление до ближайшего значения, привязка от нуля (или привязка к нулю ) – округление до ближайшего значения; если число падает посередине, оно округляется до ближайшего значения выше (для положительных чисел) или ниже (для отрицательных чисел).
В крайних случаях значение с величиной строго меньше будет округлено до минимального или максимального конечного числа (в зависимости от знака значения). Любые числа именно этой величины считаются ничьими; этот выбор галстука можно представить как середину между и , которые, если бы показатель степени не был ограничен, были бы следующими представимыми числами с плавающей запятой, большими по величине. Числа, величина которых строго больше k, округляются до соответствующей бесконечности. [ 18 ]
«Округление до ближайшего, привязка к четному» — это значение по умолчанию для двоичных чисел с плавающей запятой и рекомендуемое значение по умолчанию для десятичных. «Округление до ближайшего, привязка к отдаленному» требуется только для десятичных реализаций. [ 19 ]
Направленные округления
[ редактировать ]- Округление в сторону 0 – направленное округление в сторону нуля (также известное как усечение ).
- Округление в сторону +∞ – направленное округление в сторону положительной бесконечности (также известное как округление вверх или к потолку ).
- Округление в сторону −∞ – направленное округление в сторону отрицательной бесконечности (также известное как округление вниз или до пола ).
Режим | Пример значения | |||
---|---|---|---|---|
+11.5 | +12.5 | −11.5 | −12.5 | |
к ближайшему, привязан к четному | +12.0 | +12.0 | −12.0 | −12.0 |
до ближайшего, привязано к нулю | +12.0 | +13.0 | −12.0 | −13.0 |
к 0 | +11.0 | +12.0 | −11.0 | −12.0 |
в сторону +∞ | +12.0 | +13.0 | −11.0 | −12.0 |
в сторону −∞ | +11.0 | +12.0 | −12.0 | −13.0 |
Если не указано иное, результат операции с плавающей запятой определяется применением функции округления к бесконечно точному (математическому) результату. Такая операция называется корректным округлением . Это требование называется правильным округлением . [ 20 ]
Необходимые операции
[ редактировать ]К обязательным операциям для поддерживаемого арифметического формата (включая базовые форматы) относятся:
- Преобразования в целое число и обратно [ 21 ] [ 22 ]
- Предыдущие и следующие последовательные значения [ 21 ]
- Арифметические операции (сложение, вычитание, умножение, деление, квадратный корень, объединенное умножение-сложение , остаток, минимум, максимум) [ 21 ] [ 22 ]
- Преобразования (между форматами, в строки и обратно и т. д. ) [ 23 ] [ 24 ]
- Масштабирование и (для десятичных чисел) квантование [ 25 ] [ 26 ]
- Копирование и манипулирование знаком (абс, отрицание и т. д. ) [ 27 ]
- Сравнения и общий порядок [ 28 ] [ 29 ]
- Классификация чисел (субнормальные, конечные и т. д. ) и проверка на NaN. [ 30 ]
- Тестирование и установка флагов состояния [ 31 ]
Предикаты сравнения
[ редактировать ]Стандарт предоставляет предикаты сравнения для сравнения одних данных с плавающей запятой с другими в поддерживаемом арифметическом формате. [ 32 ] Любое сравнение с NaN считается неупорядоченным. −0 и +0 сравниваются как равные.
Предикат полного порядка
[ редактировать ]Стандарт предоставляет предикат totalOrder , который определяет общий порядок канонических членов поддерживаемого арифметического формата. [ 33 ] Предикат согласуется с предикатами сравнения (см. раздел § Предикаты сравнения ), когда одно число с плавающей запятой меньше другого. Основные различия: [ 34 ]
- NaN сортируем.
- NaN обрабатывается так, как если бы его абсолютное значение было больше, чем Infinity (или любые другие числа с плавающей запятой). (-NaN < -Бесконечность; +Бесконечность < +NaN.)
- qNaN и sNaN обрабатываются так, как если бы qNaN имел большее абсолютное значение, чем sNaN. (−qNaN < −sNaN; +sNaN < +qNaN.)
- Затем NaN сортируется в соответствии с полезной нагрузкой. В IEEE 754-2008 NaN с меньшей полезной нагрузкой рассматривается как имеющий меньшее абсолютное значение. В IEEE 754-2019 допускается любой порядок, определяемый реализацией.
- Отрицательный ноль считается меньшим, чем положительный ноль.
- Если обе стороны сравнения относятся к одному и тому же элементу данных с плавающей запятой, то тот, у которого меньший показатель степени, считается имеющим меньшее абсолютное значение. [ 33 ]
Предикат totalOrder не накладывает полный порядок на все кодировки в формате. В частности, он не различает разные кодировки одного и того же представления с плавающей запятой, например, когда одна или обе кодировки неканоничны. [ 33 ] IEEE 754-2019 включает разъяснения totalOrder .
Для форматов двоичного обмена, кодирование которых соответствует рекомендациям IEEE 754-2008 по размещению сигнального бита NaN , сравнение идентично тому, которое тип преобразует числа с плавающей запятой в целое число со знаком и величиной (при условии, что порядок полезной нагрузки соответствует этому сравнение), старый прием для сравнения FP без FPU. [ 35 ]
Обработка исключений
[ редактировать ]Стандарт определяет пять исключений, каждое из которых возвращает значение по умолчанию и имеет соответствующий флаг состояния, который возникает при возникновении исключения. [ г ] Никакой другой обработки исключений не требуется, но рекомендуются дополнительные альтернативы, отличные от стандартных (см. § Альтернативная обработка исключений ).
Пять возможных исключений:
- Недопустимая операция: математически неопределенная, например , квадратный корень из отрицательного числа. По умолчанию возвращает qNaN.
- Деление на ноль: операция с конечными операндами дает точный бесконечный результат, например , 1/0 или log(0). По умолчанию возвращает ±бесконечность.
- Переполнение: конечный результат слишком велик для точного представления ( т. е . его показатель с неограниченным диапазоном показателей будет больше, чем emax ). По умолчанию возвращает ±бесконечность для режимов округления до ближайшего (и следует правилам округления для режимов направленного округления).
- Недостаток: результат очень мал (вне нормального диапазона). По умолчанию возвращает число, меньшее или равное минимальному положительному нормальному числу по величине (согласно правилам округления); всегда Ненормальное число подразумевает исключение недостаточности, но по умолчанию, если оно точное, флаг не поднимается.
- Неточно: точный ( т. е . неокругленный) результат невозможно представить точно. По умолчанию возвращает правильно округленный результат.
Это те же пять исключений, которые были определены в IEEE 754-1985, но исключение деления на ноль было распространено на операции, отличные от деления.
Некоторые реализации десятичных чисел с плавающей запятой определяют дополнительные исключения. [ 36 ] [ 37 ] которые не являются частью IEEE 754:
- Зафиксировано: показатель степени результата слишком велик для формата назначения. По умолчанию к коэффициенту добавляются конечные нули, чтобы уменьшить показатель степени до наибольшего полезного значения. Если это невозможно (поскольку это приведет к тому, что количество необходимых цифр превысит формат назначения), возникает исключение переполнения.
- Округлено: для коэффициента результата требуется больше цифр, чем предусмотрено форматом назначения. Неточное исключение сигнализируется, если какие-либо ненулевые цифры отбрасываются.
Кроме того, такие операции, как квантование, когда любой из операндов бесконечен или когда результат не соответствует формату назначения, также будут сигнализировать об исключении недопустимой операции. [ 38 ]
Особые значения
[ редактировать ]Знаковый ноль
[ редактировать ]В стандарте IEEE 754 ноль имеет знак, что означает, что существуют как «положительный ноль» (+0), так и «отрицательный ноль» (-0). В большинстве сред выполнения положительный ноль обычно печатается как « 0
" и отрицательный ноль как " -0
". Эти два значения ведут себя как равные при числовом сравнении, но некоторые операции возвращают разные результаты для +0 и -0. Например, 1/(-0) возвращает отрицательную бесконечность, а 1/(+0) возвращает положительную бесконечность (так что что тождество 1/(1/±∞) = ±∞ сохраняется). Другие общие функции с разрывом в точке x =0, которые могут трактовать +0 и −0 по-разному, включают Γ ( x ) и главный квадратный корень из y +. xi для любого отрицательного числа y . Как и в любой схеме аппроксимации, операции с «отрицательным нулем» могут иногда вызывать путаницу. Например, в IEEE 754 x = y не всегда подразумевает 1/ x = 1/ y , поскольку 0 = -. 0, но 1/0 ≠ 1/(−0) . [ 39 ]
Субнормальные числа
[ редактировать ]Субнормальные значения заполняют пробел нижнего уровня значениями, где абсолютное расстояние между ними такое же, как и для соседних значений сразу за пределами пробела нижнего уровня. Это улучшение по сравнению со старой практикой, когда в промежутке нижнего переполнения просто был нуль, а результаты нижнего переполнения заменялись нулем (сброс до нуля). [ 40 ]
Современное оборудование с плавающей запятой обычно обрабатывает субнормальные значения (а также нормальные значения) и не требует программной эмуляции для субнормальных значений.
Бесконечности
[ редактировать ]Бесконечности расширенной линии действительных чисел могут быть представлены в типах данных IEEE с плавающей запятой, точно так же, как обычные значения с плавающей запятой, такие как 1, 1,5 и т. д. Они никоим образом не являются значениями ошибок, хотя часто (зависит от округления) ) используются в качестве замещающих значений при переполнении. При исключении деления на ноль в качестве точного результата возвращается положительная или отрицательная бесконечность. Бесконечность также может быть представлена как цифра (например, макрос «INFINITY» в языке C или « ∞ », если язык программирования допускает такой синтаксис).
IEEE 754 требует разумной обработки бесконечностей, например:
- (+∞) + (+7) = (+∞)
- (+∞) × (−2) = (−∞)
- (+∞) × 0 = NaN – нет смысла делать
NaN
[ редактировать ]IEEE 754 определяет специальное значение, называемое «Не число» (NaN), которое должно быть возвращено в результате определенных «недопустимых» операций, таких как 0/0, ∞×0 или sqrt(-1). В общем случае значения NaN будут распространяться, т. е. большинство операций, включающих NaN, приведут к результату NaN, хотя функции, которые дают определенный результат для любого заданного значения с плавающей запятой, будут делать то же самое и для NaN, например NaN ^ 0 = 1. Существует два типа NaN: тихие NaN по умолчанию и, опционально, сигнальные NaN. Сигнализация NaN в любой арифметической операции (включая числовые сравнения) вызовет исключения сигнализацию «недопустимой операции».
Представление NaN, определенное стандартом, имеет некоторые неуказанные биты, которые можно использовать для кодирования типа или источника ошибки; но стандарта для этой кодировки не существует. Теоретически, сигнальные NaN могут использоваться системой времени выполнения для обозначения неинициализированных переменных или расширения чисел с плавающей запятой другими специальными значениями, не замедляя вычисления с обычными значениями, хотя такие расширения не распространены.
Обоснование дизайна
[ редактировать ]Распространенным заблуждением является то, что более экзотические особенности стандарта IEEE 754, обсуждаемые здесь, такие как расширенные форматы, NaN, бесконечности, субнормальные числа и т. д., представляют интерес только для числовых аналитиков или для продвинутых числовых приложений. На самом деле верно обратное: эти функции предназначены для предоставления безопасных и надежных настроек по умолчанию для неискушенных в числовых вычислениях программистов, а также для поддержки сложных числовых библиотек экспертами. Главный разработчик IEEE 754 Уильям Кахан отмечает, что неверно «... [считать] функции стандарта IEEE 754 для двоичной арифметики с плавающей запятой, которые ... [не считаются] функциями, которые могут использоваться только числовыми эксперты говорят об обратном. -значит невежество среди программистов». [ 41 ]
- Специальные значения, такие как бесконечность и NaN, гарантируют, что арифметика с плавающей запятой является алгебраически полной: каждая операция с плавающей запятой дает четко определенный результат и по умолчанию не вызывает машинного прерывания или прерывания. Более того, выбор специальных значений, возвращаемых в исключительных случаях, был разработан для того, чтобы во многих случаях дать правильный ответ. Например, согласно арифметике IEEE 754, непрерывные дроби, такие как R(z) := 7 - 3/[z - 2 - 1/(z - 7 + 10/[z - 2 - 2/(z - 3)]) ] даст правильный ответ на всех входных данных, поскольку деление потенциала на ноль, например, для z = 3 , правильно обрабатывается заданием +бесконечности, и поэтому такие исключения можно безопасно игнорировать. [ 42 ] Как отметил Кахан, необработанная ловушка, последовавшая за переполнением при преобразовании чисел с плавающей запятой в 16-битные целые числа, которая привела к потере ракеты Ariane 5, не произошла бы при стандартной политике IEEE 754 с плавающей запятой. [ 41 ]
- Субнормальные числа гарантируют, что для конечных чисел с плавающей запятой x и y x - y = 0 тогда и только тогда, когда x = y, как и ожидалось, но что не выполнялось в более ранних представлениях с плавающей запятой. [ 43 ]
- По поводу обоснования разработки 80-битного формата x87 Кахан отмечает: «Этот расширенный формат предназначен для использования с незначительной потерей скорости для всех операций, кроме простейшей арифметики с операндами с плавающей запятой и двойными числами. Например, его следует использовать для чистых переменных в циклах, которые реализуют повторения, такие как полиномиальная оценка, скалярные произведения, частичные и непрерывные дроби. Это часто предотвращает преждевременное переполнение/недополнение или серьезную локальную отмену, которая может испортить простые алгоритмы». [ 44 ] Вычисление промежуточных результатов в расширенном формате с высокой точностью и расширенным показателем степени имеет прецеденты в исторической практике научных вычислений и в конструкции научных калькуляторов , например, Hewlett-Packard выполняли финансовые калькуляторы арифметические и финансовые функции с точностью до трех значащих десятичных знаков, чем они сохраняли. или отображается. [ 44 ] Реализация расширенной точности позволила легко разработать стандартные библиотеки элементарных функций, которые обычно давали результаты двойной точности в пределах одной единицы в последнем месте (ULP) на высокой скорости.
- Правильное округление значений до ближайшего представимого значения позволяет избежать систематических погрешностей в расчетах и замедляет рост ошибок. Округление связей даже устраняет статистическую погрешность, которая может возникнуть при сложении аналогичных цифр.
- Направленное округление было задумано как средство проверки границ ошибок, например, в интервальной арифметике . Он также используется при реализации некоторых функций.
- Математическая основа операций, в частности правильное округление, позволяет доказать математические свойства и разработать алгоритмы с плавающей запятой, такие как 2Sum, Fast2Sum и алгоритм суммирования Кахана , например, для повышения точности или относительно простой реализации арифметических подпрограмм с многократной точностью.
Свойством форматов одинарной и двойной точности является то, что их кодирование позволяет легко сортировать их без использования аппаратных средств с плавающей запятой, как если бы биты представляли целые числа со знаком и величиной , хотя неясно, было ли это конструктивным соображением (это Кажется примечательным, что более раннее шестнадцатеричное представление с плавающей запятой IBM также имело это свойство для нормализованных чисел). При распространенном с дополнением до двух представлении интерпретация битов как целых чисел со знаком правильно сортирует положительные значения, но с обратными отрицательными значениями; в качестве одного из возможных исправлений этого, с помощью xor, чтобы перевернуть знаковый бит для положительных значений и все биты для отрицательных значений, все значения становятся сортируемыми как целые числа без знака (с −0 < +0 ). [ 35 ]
Рекомендации
[ редактировать ]Альтернативная обработка исключений
[ редактировать ]Стандарт рекомендует необязательную обработку исключений в различных формах, включая предварительную замену пользовательских значений по умолчанию, ловушки (исключения, которые каким-то образом изменяют поток управления) и другие модели обработки исключений, которые прерывают поток, такие как try/catch. Ловушки и другие механизмы исключений остаются необязательными, как и в IEEE 754-1985.
Рекомендуемые операции
[ редактировать ]Пункт 9 стандарта рекомендует дополнительные математические операции. [ 45 ] которые должны определять языковые стандарты. [ 46 ] Ничто не требуется для соответствия стандарту.
Ниже приведены рекомендуемые арифметические операции, которые необходимо правильно округлять: [ 47 ]
- , ,
- , ,
- , ,
- , ,
- для (называется соединением и используется для вычисления экспоненциального роста , скорость которого не может быть меньше -1) [ 48 ]
- ,
- , ,
- , , ,
- , , (см. также: Кратные π )
- , , , (см. также: Кратные π )
- , ,
- , ,
The , и функции не были частью стандарта IEEE 754-2008, поскольку считались менее необходимыми. [ 49 ] и были упомянуты, но это было расценено как ошибка. [ 5 ] Все три были добавлены в редакцию 2019 года.
Рекомендуемые операции также включают установку и доступ к направлению округления в динамическом режиме, [ 50 ] и определяемые реализацией операции векторного сокращения, такие как сумма, масштабированное произведение и скалярное произведение , точность которых не указана стандартом. [ 51 ]
По состоянию на 2019 год [update], расширенные арифметические операции [ 52 ] для двоичных форматов также рекомендуется. Эти операции, предназначенные для сложения, вычитания и умножения, создают пару значений, состоящих из результата, правильно округленного до ближайшего в формате, и члена ошибки, который точно может быть представлен в этом формате. На момент публикации стандарта аппаратные реализации неизвестны, но очень похожие операции уже были реализованы в программном обеспечении с использованием известных алгоритмов. История и мотивация их стандартизации объяснены в справочном документе. [ 53 ] [ 54 ]
С 2019 года ранее обязательные minNum , maxNum , minNumMag и maxNumMag в IEEE 754-2008 теперь устарели из-за их неассоциативности . Вместо этого рекомендуется использовать два набора новых минимальных и максимальных операций. [ 55 ] Первый набор содержит минимум , минимум , максимум и максимум . Второй набор содержит минимальное значение , минимальное значение , максимальное значение и максимальное значение . История и мотивация этого изменения объяснены в справочном документе. [ 56 ]
Оценка выражения
[ редактировать ]Стандарт рекомендует, как языковые стандарты должны определять семантику последовательностей операций, и указывает на тонкости буквальных значений и оптимизаций, которые меняют значение результата. Напротив, предыдущая версия стандарта 1985 года оставляла неопределенными аспекты языкового интерфейса, что приводило к несогласованному поведению между компиляторами или к разным уровням оптимизации в оптимизирующем компиляторе .
Языки программирования должны позволять пользователю указывать минимальную точность для промежуточных вычислений выражений для каждого основания. В стандарте это называется предпочтительной шириной , и должна быть возможность устанавливать ее для каждого блока отдельно. Промежуточные вычисления внутри выражений следует рассчитывать и сохранять все временные значения, используя максимальную ширину операндов и предпочтительную ширину, если она установлена. Так, например, компилятор, предназначенный для аппаратного обеспечения с плавающей запятой x87, должен иметь возможность указать, что промежуточные вычисления должны использовать двойное расширение формата . Сохраненное значение переменной всегда должно использоваться при вычислении последующих выражений, а не любого предшественника, полученного до округления и присвоения переменной.
Воспроизводимость
[ редактировать ]Версия стандарта IEEE 754-1985 допускала множество вариантов реализации (например, кодирование некоторых значений и обнаружение определенных исключений). IEEE 754-2008 сократил эти допуски, но некоторые вариации все еще остаются (особенно для двоичных форматов). В пункте о воспроизводимости рекомендуется, чтобы стандарты языка предоставляли средства для написания воспроизводимых программ (т. е. программ, которые будут давать одинаковый результат во всех реализациях языка) и описывалось, что необходимо сделать для достижения воспроизводимых результатов.
Представление персонажа
[ редактировать ]Стандарт требует операций по преобразованию базовых форматов во внешние форматы последовательностей символов . [ 57 ] Преобразования в десятичный формат символов и обратно необходимы для всех форматов. Преобразование во внешнюю последовательность символов должно быть таким, чтобы обратное преобразование с использованием округления до ближайшего, привязки к четному восстанавливало исходное число. Нет необходимости сохранять полезную нагрузку тихого NaN или сигнального NaN, а преобразование из внешней последовательности символов может превратить сигнальный NaN в спокойный NaN.
Исходное двоичное значение будет сохранено путем преобразования в десятичное и обратно с помощью: [ 58 ]
- 5 десятичных цифр для двоичного кода 16,
- 9 десятичных цифр для двоичного32,
- 17 десятичных цифр для двоичного кода 64,
- 36 десятичных цифр для двоичного числа 128.
Для других двоичных форматов необходимое количество десятичных цифр равно [ ч ]
где p — количество значащих битов в двоичном формате, например 237 бит для двоичного формата256.
При использовании десятичного формата с плавающей запятой десятичное представление будет сохранено с помощью:
- 7 десятичных цифр для decimal32,
- 16 десятичных цифр для decimal64,
- 34 десятичных цифры для десятичного числа 128.
Алгоритмы с кодом для правильного округления преобразования из двоичного числа в десятичное и из десятичного в двоичное обсуждаются Гей, [ 59 ] а для тестирования – Паксон и Кахан. [ 60 ]
Шестнадцатеричные литералы
[ редактировать ]Стандарт рекомендует обеспечивать преобразования во внешние шестнадцатерично-значащие символы и обратно на основе . шестнадцатеричных литералов с плавающей запятой C99 Такой литерал состоит из необязательного знака ( +
или -
), индикатор «0x», шестнадцатеричное число с точкой или без нее, индикатор степени «p» и десятичную степень с необязательным знаком. Синтаксис не чувствителен к регистру. [ 61 ] Десятичный показатель масштабируется по степени двойки, например 0x0.1p-4
составляет 1/256. [ 62 ]
См. также
[ редактировать ]- формат чисел с плавающей запятой bfloat16
- Бинада
- Сопроцессор
- 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, чтобы обеспечить воспроизводимость на распространенных аппаратных платформах (начиная с Java 17, такое поведение является обязательным).
- Дилемма столовщика, чтобы узнать больше о правильном округлении функций.
- Стандартная среда Apple Numerics
- Коническая с плавающей запятой
- Posit , альтернативный числовой формат.
Примечания
[ редактировать ]- ^ Например, если основание равно 10, знак равен 1 (обозначает отрицательное значение), мантисса равна 12345, а показатель степени равен -3, то значение числа равно (-1). 1 × 12345 × 10 −3 = −1 × 12345 × 0.001 = −12.345.
- ^ Приблизительные значения. Точные значения см. в отдельной статье Википедии для каждого формата.
- ^ Количество цифр в используемой системе счисления, включая любые неявные цифры, но не считая знакового бита.
- ^ Соответствующее количество десятичных цифр, более подробную информацию см. в тексте.
- ^ В отличие от десятичного формата, не существует двоичного формата обмена длиной 96 бит. Однако такой формат по-прежнему разрешен как формат без обмена.
- ^ Стандарт рекомендует 0 для сигнальных NaN, 1 для тихих NaN, так что сигнальные NaN можно заглушить, изменив только этот бит на 1, в то время как обратное может привести к кодированию бесконечности.
- ^ В некоторых случаях опустошения флаг не поднимается.
- ^ В качестве ограничения реализации правильное округление гарантируется только для требуемого количества десятичных цифр плюс 3 для наибольшего поддерживаемого двоичного формата. Например, если двоичный32 является самым большим поддерживаемым двоичным форматом, то преобразование из десятичной внешней последовательности с 12 десятичными цифрами гарантированно будет правильно округлено при преобразовании в двоичный32; а вот преобразование последовательности из 13 десятичных цифр нет; однако стандарт рекомендует, чтобы реализации не налагали такого ограничения.
Ссылки
[ редактировать ]- ^ IEEE 754 2019 г.
- ^ Хаас, Джоди. «Прошивка: ISO/IEC/IEEE 60559 (IEEE Std 754-2008)» . grouper.ieee.org . Архивировано из оригинала 27 октября 2017 г. Проверено 4 апреля 2018 г.
- ^ «Соглашение о сотрудничестве между Партнерской организацией по разработке стандартов ISO/IEEE (PSDO)» (PDF) . ИСО. 19 декабря 2007 г. Проверено 27 декабря 2021 г.
- ^ ISO/IEC JTC 1/SC 25 2011 .
- ^ Jump up to: а б Коулишоу, Майк (13 ноября 2013 г.). «Ошибки стандарта IEEE 754-2008» . speleotrove.com . Проверено 24 января 2020 г.
- ^ «ANSI/IEEE Std 754-2019» . ucbtest.org . Проверено 16 января 2024 г.
- ^ ISO/IEC JTC 1/SC 25 2020 .
- ^ Риди, Э. Джейсон (26 июня 2018 г.), «Планы для стандарта IEEE 754–2028» (PDF) , 25-й симпозиум IEEE по компьютерной арифметике , Амхерст, Массачусетс: IEEE
- ^ IEEE 754 2008 , §2.1.27.
- ^ «Внутреннее устройство SpiderMonkey» . http://developer.mozilla.org . Проверено 11 марта 2018 г.
- ^ Клеменс, Бен (сентябрь 2014 г.). 21 век C: Советы C от новой школы . О'Рейли Медиа, Инкорпорейтед. п. 160. ИСБН 9781491904442 . Проверено 11 марта 2018 г.
- ^ "zuiderkwast/nanbox: NaN-бокс в C" . Гитхаб . Проверено 11 марта 2018 г.
- ^ IEEE 754 2008 , §3.6.
- ^ IEEE 754 2008 , §3.7.
- ^ IEEE 754 2008 , §3.7 гласит: «Стандарты языка должны определять механизмы, поддерживающие расширяемую точность для каждого поддерживаемого основания системы счисления».
- ^ IEEE 754 2008 , §3.7 гласит: «Языковые стандарты или реализации должны поддерживать формат расширенной точности, который расширяет самый широкий базовый формат, поддерживаемый в этом основании».
- ^ Семейство Motorola MC68000 (PDF) . Справочное руководство программиста. НХП Полупроводники. 1992. стр. 1–16, 1–18, 1–23.
- ^ IEEE 754 2008 , §4.3.1. «В следующих двух атрибутах направления округления бесконечно точный результат с величиной не менее округлю до без изменения знака».
- ^ IEEE 754 2008 , §4.3.3
- ^ IEEE 754 2019 , §2.1
- ^ Jump up to: а б с IEEE 754 2008 , §5.3.1
- ^ Jump up to: а б IEEE 754 2008 , §5.4.1
- ^ IEEE 754 2008 , §5.4.2
- ^ IEEE 754 2008 , §5.4.3
- ^ IEEE 754 2008 , §5.3.2
- ^ IEEE 754 2008 , §5.3.3
- ^ IEEE 754 2008 , §5.5.1
- ^ IEEE 754 2008 , §5.10
- ^ IEEE 754 2008 , §5.11
- ^ IEEE 754 2008 , §5.7.2
- ^ IEEE 754 2008 , §5.7.4
- ^ IEEE 754 2019 , §5.11
- ^ Jump up to: а б с IEEE 754 2019 , §5.10
- ^ «Реализовать total_cmp для f32, f64 от golddranks · Запрос на включение № 72568 · ржавчина-lang/rust» . Гитхаб . – содержит соответствующие цитаты из IEEE 754-2008 и -2019. Содержит реализацию и объяснение каламбура.
- ^ Jump up to: а б Херф, Майкл (декабрь 2001 г.). «радикс-трюки» . стереопсис: графика .
- ^ «9.4. decimal — Десятичная арифметика с фиксированной запятой и с плавающей запятой — Документация Python 3.6.5» . docs.python.org . Проверено 4 апреля 2018 г.
- ^ «Десятичная арифметика – Исключительные условия» . speleotrove.com . Проверено 4 апреля 2018 г.
- ^ IEEE 754 2008 , §7.2 (h)
- ^ Гольдберг 1991 .
- ^ Мюллер, Жан-Мишель; Бризебар, Николя; из Динешена, Флоран; Жаннерод, Клод-Пьер; Лефевр, Винсент; Мелькионд, Гийом; Револь, Натали ; Штеле, Дэмиен; Торрес, Серж (2010). Справочник по арифметике с плавающей запятой (1-е изд.). Биркхойзер . дои : 10.1007/978-0-8176-4705-6 . ISBN 978-0-8176-4704-9 . LCCN 2009939668 .
- ^ Jump up to: а б Кахан, Уильям Мортон ; Дарси, Джозеф (2001) [1998-03-01]. «Как числа с плавающей запятой в Java вредят всем и повсюду» (PDF) . Архивировано (PDF) из оригинала 16 августа 2000 г. Проверено 5 сентября 2003 г.
- ^ Кахан, Уильям Мортон (12 февраля 1981 г.). «Зачем нам нужен стандарт арифметики с плавающей запятой?» (PDF) . п. 26. Архивировано (PDF) из оригинала 4 декабря 2004 г.
- ^ Северанс, Чарльз (20 февраля 1998 г.). «Интервью со стариком, занимающимся плавающей запятой» .
- ^ Jump up to: а б Кахан, Уильям Мортон (11 июня 1996 г.). «Пагубное влияние компьютерных тестов на прикладную математику, физику и химию» (PDF) . Архивировано (PDF) из оригинала 13 октября 2013 г.
- ^ IEEE 754 2019 , §9.2
- ^ IEEE 754 2008 , пункт 9.
- ^ IEEE 754 2019 , §9.2.
- ^ «Слишком много силы — pow vs powr, powd, pown, rootn, complex» . grouper.ieee.org . Проверено 16 января 2024 г.
Поскольку темпы роста не могут быть меньше -1, такие темпы сигнализируют о недопустимых исключениях.
- ^ «Re: Отсутствуют функции tanPi, asinPi и acosPi» . grouper.ieee.org . Архивировано из оригинала 6 июля 2017 г. Проверено 4 апреля 2018 г.
- ^ IEEE 754 2008 , §9.3.
- ^ IEEE 754 2008 , §9.4.
- ^ IEEE 754 2019 , §9.5
- ^ Риди, Джейсон; Деммел, Джеймс. «Расширенные арифметические операции, предложенные для IEEE-754 2018» (PDF) . 25-й симпозиум IEEE по компьютерной арифметике (ARITH 2018). стр. 49–56. Архивировано (PDF) из оригинала 23 июля 2019 г. Проверено 23 июля 2019 г.
- ^ «ANSI/IEEE Std 754-2019 – Справочная документация» . grouper.ieee.org . Проверено 16 января 2024 г.
- ^ IEEE 754 2019 , §9.6.
- ^ Чен, Дэвид. «Удаление/понижение статуса операций MinNum и MaxNum из IEEE 754-2018» (PDF) . grouper.ieee.org . Проверено 16 января 2024 г.
- ^ IEEE 754 2008 , §5.12.
- ^ IEEE 754 2008 , §5.12.2.
- ^ Гей, Дэвид М. (30 ноября 1990 г.), Правильно округленные двоично-десятичные и десятично-двоичные преобразования , Рукопись численного анализа, Мерри Хилл, Нью-Джерси, США: AT&T Laboratories, 90-10
- ^ Паксон, Верн; Кахан, Уильям (22 мая 1991 г.), Программа для тестирования десятично-двоичного преобразования IEEE , рукопись, CiteSeerX 10.1.1.144.5889
- ^ IEEE 754 2008 , §5.12.3
- ^ «6.9.3. Шестнадцатеричные литералы с плавающей запятой — Glasgow Haskell Compiler 9.3.20220129 Руководство пользователя» . ghc.gitlab.haskell.org . Проверено 29 января 2022 г.
Стандарты
[ редактировать ]- Стандарт IEEE для двоичной арифметики с плавающей запятой . АНСИ/ИИЭР СТАНД 754-1985. IEEE. 12 октября 1985 г. стр. 1–20. doi : 10.1109/IEESTD.1985.82928 . ISBN 0-7381-1165-1 .
- Компьютерное общество IEEE (29 августа 2008 г.). Стандарт IEEE для арифметики с плавающей запятой . СТД ИИЭР 754-2008. IEEE. стр. 1–70. дои : 10.1109/IEESTD.2008.4610935 . ISBN 978-0-7381-5753-5 . Стандарт IEEE 754-2008.
- Компьютерное общество IEEE (22 июля 2019 г.). Стандарт IEEE для арифметики с плавающей запятой . IEEE СТД 754-2019. IEEE. стр. 1–84. doi : 10.1109/IEESTD.2019.8766229 . ISBN 978-1-5044-5924-2 . Стандарт IEEE 754-2019.
- ISO/IEC JTC 1/SC 25 (июнь 2011 г.). ISO/IEC/IEEE 60559:2011 — Информационные технологии. Микропроцессорные системы. Арифметика с плавающей запятой . ИСО. стр. 1–58.
{{cite book}}
: CS1 maint: числовые имена: список авторов ( ссылка ) - ISO/IEC JTC 1/SC 25 (май 2020 г.). ISO/IEC 60559:2020 — Информационные технологии. Микропроцессорные системы. Арифметика с плавающей запятой . ИСО. стр. 1–74.
{{cite book}}
: CS1 maint: числовые имена: список авторов ( ссылка )
Вторичные ссылки
[ редактировать ]- Десятичная арифметика с плавающей запятой , часто задаваемые вопросы, библиография и ссылки
- Сравнение двоичных чисел с плавающей запятой
- Справочный материал IEEE 754
- IEEE 854-1987 – История и протоколы
- Дополнительные материалы для IEEE 754 . Включает исторические перспективы.
Дальнейшее чтение
[ редактировать ]- Гольдберг, Дэвид (март 1991 г.). «Что должен знать каждый ученый-компьютерщик об арифметике с плавающей запятой» (PDF) . Обзоры вычислительной техники ACM . 23 (1): 5–48. дои : 10.1145/103162.103163 . S2CID 222008826 . Архивировано (PDF) из оригинала 20 июля 2006 г. Проверено 20 января 2016 г. ( [1] , [2] , [3] )
- Хекер, Крис (февраль 1996 г.). «Давайте перейдем к (плавающей) точке» (PDF) . Журнал разработчиков игр : 19–24. ISSN 1073-922X .
- Северанс, Чарльз (март 1998 г.). «IEEE 754: Интервью с Уильямом Каханом» (PDF) . IEEE-компьютер . 31 (3): 114–115. дои : 10.1109/MC.1998.660194 . S2CID 33291145 . Проверено 08 марта 2019 г.
- Коулишоу, Майк (июнь 2003 г.). «Десятичное число с плавающей запятой: алгоритм для компьютеров». 16-й симпозиум IEEE по компьютерной арифметике, 2003 г. Материалы (PDF) . Лос Аламитос, Калифорния: Компьютерное общество IEEE. стр. 104–111. дои : 10.1109/ARITH.2003.1207666 . ISBN 978-0-7695-1894-7 . S2CID 18713046 . Проверено 14 ноября 2014 г. . (Примечание: «Алгоризм» — это не опечатка в названии; см. также «алгоризм» .)
- Моннио, Дэвид (май 2008 г.). «Подводные камни проверки вычислений с плавающей запятой» . Транзакции ACM в языках и системах программирования . 30 (3): 1–41. arXiv : cs/0701192 . дои : 10.1145/1353445.1353446 . ISSN 0164-0925 . S2CID 218578808 . : Сборник неинтуитивных вариантов поведения чисел с плавающей запятой в популярных архитектурах, имеющих значение для проверки и тестирования программ.
- Мюллер, Жан-Мишель; Бруни, Николас; из Динешена, Флоран; Жаннерод, Клод-Пьер; Джолдес, Миоара; Лефевр, Винсент; Мелькионд, Гийом; Револь, Натали ; Торрес, Серж (2018) [2010]. Справочник по арифметике с плавающей запятой (2-е изд.). Биркхойзер . дои : 10.1007/978-3-319-76526-6 . ISBN 978-3-319-76525-9 .
- Овертон, Майкл Л. (2001). Написано в Институте математических наук Куранта Нью -Йоркского университета , Нью-Йорк, США. Численные вычисления с использованием арифметики с плавающей запятой IEEE (1-е изд.). Филадельфия, США: СИАМ . дои : 10.1137/1.9780898718072 . ISBN 978-0-89871-482-1 . 978-0-89871-571-2, 0-89871-571-7.
- Клив Молер о числах с плавающей запятой
- Биб, Нельсон ХФ (22 августа 2017 г.). Справочник по математическим вычислениям - Программирование с использованием портативной библиотеки программного обеспечения MathCW (1-е изд.). Солт-Лейк-Сити, Юта, США: Springer International Publishing AG . дои : 10.1007/978-3-319-64110-2 . ISBN 978-3-319-64109-6 . LCCN 2017947446 . S2CID 30244721 .
- Хаф, Дэвид Г. (декабрь 2019 г.). «Стандарт IEEE 754: один для книг по истории» . Компьютер . 52 (12). IEEE : 109–112. дои : 10.1109/MC.2019.2926614 . S2CID 208281213 .
Внешние ссылки
[ редактировать ]- Кахан о создании стандарта IEEE с плавающей запятой . Клипы лауреатов премии Тьюринга . 16.11.2020. Архивировано из оригинала 08.11.2021.