stringtranslate.com

ИЭЭЭ 754

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

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

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 для независимой от основания арифметики с плавающей запятой . Двоичные форматы исходного стандарта включены в этот новый стандарт вместе с тремя новыми базовыми форматами: одним двоичным и двумя десятичными. Чтобы соответствовать текущему стандарту, реализация должна реализовать хотя бы один из базовых форматов как арифметический формат, так и формат обмена.

Международный стандарт 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 = 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. Следовательно, ведущая 1 может подразумеваться, а не присутствовать явно в кодировке памяти. и согласно стандарту явно представленная часть мантиссы будет лежать между 0 и 1. Это правило называется соглашением о ведущих битах , неявным соглашением битов или соглашением скрытых битов . Это правило позволяет двоичному формату иметь дополнительную точность. Соглашение о ведущих битах не может использоваться для субнормальных чисел, поскольку они имеют показатель степени, выходящий за пределы диапазона нормального показателя, и масштабируются по наименьшему представленному показателю, используемому для наименьших нормальных чисел.

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

Базовые и обменные форматы

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

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

В таблице выше целочисленные значения являются точными, тогда как значения в десятичной записи (например, 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 в диапазоне от 10–12 до 10 12.

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

и 64-битная раскладка аналогична.

Расширенные и расширяемые прецизионные форматы

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

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

Форматы обмена

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

Двоичный

Для обмена двоичными числами с плавающей запятой определены форматы обмена длиной 16 бит, 32 бита, 64 бита и любое кратное 32 битам ≥ 128 [e] . 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 различаются использованием исключительно старшего бита конечного поля мантиссы, [f] , а полезная нагрузка передается в остальных битах.

Десятичная дробь

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

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

Правила округления

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

Округление до ближайшего

В крайних случаях значение, величина которого строго меньше, будет округлено до минимального или максимального конечного числа (в зависимости от знака значения). Любые числа именно этой величины считаются ничьими; этот выбор связи можно представить как среднюю точку между и , которые, если бы показатель степени не был ограничен, были бы следующими представимыми числами с плавающей запятой, большими по величине. Числа, величина которых строго больше k, округляются до соответствующей бесконечности. [17]

«Округление до ближайшего значения, привязка к четному» — это значение по умолчанию для двоичных чисел с плавающей запятой и рекомендуемое значение по умолчанию для десятичных чисел. «Округление до ближайшего, привязка к дальнему» требуется только для десятичных реализаций. [18]

Направленные округления

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

Необходимые операции

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

Предикаты сравнения

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

Предикат полного порядка

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

Для форматов двоичного обмена, кодирование которых соответствует рекомендациям IEEE 754-2008 по размещению сигнального бита NaN , сравнение идентично тому, которое тип преобразует числа с плавающей запятой в целое число со знаком и величиной (при условии, что порядок полезной нагрузки соответствует этому сравнение), старый прием для сравнения FP без FPU. [33]

Обработка исключений

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

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

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

Некоторые реализации десятичных чисел с плавающей запятой определяют дополнительные исключения, [34] [35] , которые не являются частью IEEE 754:

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

Особые значения

Знаковый ноль

В стандарте IEEE 754 ноль имеет знак, что означает, что существуют как «положительный ноль» (+0), так и «отрицательный ноль» (-0). В большинстве сред выполнения положительный ноль обычно печатается как " 0", а отрицательный ноль - как " -0". Эти два значения ведут себя как равные при числовом сравнении, но некоторые операции возвращают разные результаты для +0 и -0. Например, 1/(-0) возвращает отрицательную бесконечность, а 1/(+0) возвращает положительную бесконечность (так что сохраняется тождество 1/(1/±∞) = ±∞ ). Другие распространенные функции с разрывом в точке x =0, которые могут обрабатывать +0 и −0 по-разному, включают log ( x ), Signum ( x ) и главный квадратный корень из y + xi для любого отрицательного числа y . Как и в любой схеме аппроксимации, операции с «отрицательным нулем» иногда могут вызывать путаницу. Например, в IEEE 754 x = y не всегда подразумевает 1/ x = 1/ y , поскольку 0 = −0 , но 1/0 ≠ 1/(−0) . [37]

Субнормальные числа

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

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

Бесконечности

Бесконечности расширенной линии действительных чисел могут быть представлены в типах данных IEEE с плавающей запятой, точно так же, как обычные значения с плавающей запятой, такие как 1, 1,5 и т. д. Они никоим образом не являются значениями ошибок, хотя часто (зависит от округления) ) используются в качестве замещающих значений при переполнении. При исключении деления на ноль в качестве точного результата возвращается положительная или отрицательная бесконечность. Бесконечность также может быть представлена ​​как цифра (например, макрос «INFINITY» в языке C или « », если язык программирования допускает такой синтаксис).

IEEE 754 требует разумной обработки бесконечностей, например:

NaN

IEEE 754 определяет специальное значение, называемое «Не число» (NaN), которое должно быть возвращено в результате определенных «недопустимых» операций, таких как 0/0, ∞×0 или sqrt(-1). В общем, значения NaN будут распространяться, т. е. большинство операций, включающих NaN, приведут к результату NaN, хотя функции, которые дают определенный результат для любого заданного значения с плавающей запятой, будут делать то же самое и для NaN, например NaN ^ 0 = 1. Существует два типа NaN: тихие NaN по умолчанию и, опционально, сигнальные NaN. Сигнализация NaN в любой арифметической операции (включая числовые сравнения) вызовет сигнализацию исключения «недопустимой операции».

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

Обоснование дизайна

Уильям Кахан . Главный разработчик сопроцессора Intel 80x87 с плавающей запятой и стандарта операций с плавающей запятой IEEE 754.

Это распространенное заблуждение, что обсуждаемые здесь более эзотерические особенности стандарта IEEE 754, такие как расширенные форматы, NaN, бесконечности, субнормальные числа и т. д., представляют интерес только для числовых аналитиков или для продвинутых числовых приложений. На самом деле верно обратное: эти функции предназначены для предоставления безопасных и надежных настроек по умолчанию для неискушенных в числовых вычислениях программистов, а также для поддержки сложных числовых библиотек экспертами. Главный разработчик IEEE 754 Уильям Кахан отмечает, что неверно «... [считать] функции стандарта IEEE 754 для двоичной арифметики с плавающей запятой, которые ... [не считаются] функциями, которые могут использоваться только числовыми Эксперты. Факты прямо противоположные. В 1977 году эти функции были заложены в процессор Intel 8087, чтобы обслуживать максимально широкий рынок... Анализ ошибок подсказывает нам, как разработать арифметику с плавающей запятой, подобную стандарту IEEE 754, умеренно толерантную к хорошо -значит невежество среди программистов». [39]

Свойством форматов одинарной и двойной точности является то, что их кодирование позволяет легко сортировать их без использования аппаратных средств с плавающей запятой, как если бы биты представляли целые числа со знаком и величиной , хотя неясно, было ли это конструктивным соображением (это Кажется примечательным, что более раннее шестнадцатеричное представление IBM с плавающей запятой также имело это свойство для нормализованных чисел). При распространенном представлении с дополнением до двух интерпретация битов как целых чисел со знаком правильно сортирует положительные значения, но с обратным расположением отрицательных значений; в качестве одного из возможных исправлений этого, с помощью xor , чтобы перевернуть знаковый бит для положительных значений и все биты для отрицательных значений, все значения становятся сортируемыми как целые числа без знака (с −0 < +0 ). [33]

Рекомендации

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

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

Рекомендуемые операции

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

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

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

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

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

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

Оценка выражения

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

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

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

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

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

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

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

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

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

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

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

Шестнадцатеричные литералы

Стандарт рекомендует обеспечивать преобразования во внешние шестнадцатерично-значащие символы и обратно на основе шестнадцатеричных литералов с плавающей запятой C99 . Такой литерал состоит из необязательного знака ( +или -), индикатора «0x», шестнадцатеричного числа с точкой или без нее, индикатора степени «p» и десятичного показателя степени с необязательным знаком. Синтаксис не чувствителен к регистру. [59] Десятичный показатель степени масштабируется по степени 2, например, 0x0.1p-4это 1/256. [60]

Смотрите также

Примечания

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

Рекомендации

  1. ^ IEEE 754 2019 г.
  2. ^ Хаас, Джоди. «Прошивка: ISO/IEC/IEEE 60559 (IEEE Std 754-2008)». grouper.ieee.org . Архивировано из оригинала 27 октября 2017 г. Проверено 4 апреля 2018 г.
  3. ^ «Соглашение о сотрудничестве партнерской организации по разработке стандартов ISO/IEEE (PSDO)» (PDF) . ИСО. 19 декабря 2007 г. Проверено 27 декабря 2021 г.
  4. ^ ISO/IEC JTC 1/SC 25 2011.
  5. ^ аб Коулишоу, Майк (13 ноября 2013 г.). «Ошибки IEEE 754-2008». speleotrove.com . Проверено 24 января 2020 г.
  6. ^ "ANSI/IEEE Std 754-2019" . ucbtest.org . Проверено 16 января 2024 г.
  7. ^ ISO/IEC JTC 1/SC 25 2020.
  8. ^ Риди, Э. Джейсон (26 июня 2018 г.), «Планы для стандарта IEEE 754–2028» (PDF) , 25-й симпозиум IEEE по компьютерной арифметике , Амхерст, Массачусетс: IEEE
  9. ^ IEEE 754 2008, §2.1.27.
  10. ^ "Внутреннее устройство SpiderMonkey" . http://developer.mozilla.org . Проверено 11 марта 2018 г.
  11. ^ Клеменс, Бен (сентябрь 2014 г.). 21 век C: Советы C от новой школы. О'Рейли Медиа, Инкорпорейтед. п. 160. ИСБН 9781491904442. Проверено 11 марта 2018 г.
  12. ^ "zuiderkwast/nanbox: NaN-бокс в C" . Гитхаб . Проверено 11 марта 2018 г.
  13. ^ IEEE 754 2008, §3.6.
  14. ^ IEEE 754 2008, §3.7.
  15. ^ IEEE 754 2008, §3.7 гласит: «Стандарты языка должны определять механизмы, поддерживающие расширяемую точность для каждого поддерживаемого основания системы счисления».
  16. ^ IEEE 754 2008, §3.7 гласит: «Языковые стандарты или реализации должны поддерживать формат расширенной точности, который расширяет самый широкий базовый формат, поддерживаемый в этом основании».
  17. ^ IEEE 754 2008, §4.3.1. «В следующих двух атрибутах направления округления бесконечно точный результат с величиной, по крайней мере, должен округляться до без изменения знака».
  18. ^ IEEE 754 2008, §4.3.3
  19. ^ IEEE 754 2019, §2.1
  20. ^ abc IEEE 754 2008, §5.3.1
  21. ^ ab IEEE 754 2008, §5.4.1
  22. ^ IEEE 754 2008, §5.4.2
  23. ^ IEEE 754 2008, §5.4.3
  24. ^ IEEE 754 2008, §5.3.2
  25. ^ IEEE 754 2008, §5.3.3
  26. ^ IEEE 754 2008, §5.5.1
  27. ^ IEEE 754 2008, §5.10
  28. ^ IEEE 754 2008, §5.11
  29. ^ IEEE 754 2008, §5.7.2
  30. ^ IEEE 754 2008, §5.7.4
  31. ^ IEEE 754 2019, §5.11
  32. ^ ab IEEE 754 2019, §5.10
  33. ^ аб Херф, Майкл (декабрь 2001 г.). «радиксные трюки». стереопсис: графика .
  34. ^ «9.4. decimal — Десятичная арифметика с фиксированной и плавающей запятой — Документация Python 3.6.5» . docs.python.org . Проверено 4 апреля 2018 г.
  35. ^ «Десятичная арифметика — исключительные условия» . speleotrove.com . Проверено 4 апреля 2018 г.
  36. ^ IEEE 754 2008, §7.2 (h)
  37. ^ Гольдберг 1991.
  38. ^ Мюллер, Жан-Мишель; Бризебар, Николя; де Динешен, Флоран; Жаннерод, Клод-Пьер; Лефевр, Винсент; Мелькионд, Гийом; Револь, Натали ; Стеле, Дэмиен; Торрес, Серж (2010). Справочник по арифметике с плавающей запятой (1-е изд.). Биркхойзер . дои : 10.1007/978-0-8176-4705-6. ISBN 978-0-8176-4704-9. LCCN  2009939668.
  39. ^ Аб Кахан, Уильям Мортон ; Дарси, Джозеф (2001) [1998-03-01]. «Как числа с плавающей запятой в Java вредят всем и повсюду» (PDF) . Архивировано (PDF) из оригинала 16 августа 2000 г. Проверено 5 сентября 2003 г.
  40. ^ Кахан, Уильям Мортон (12 февраля 1981 г.). «Зачем нам нужен стандарт арифметики с плавающей запятой?» (PDF) . п. 26. Архивировано (PDF) из оригинала 4 декабря 2004 г.
  41. ^ Северанс, Чарльз (20 февраля 1998 г.). «Интервью со стариком с плавающей запятой».
  42. ^ Аб Кахан, Уильям Мортон (11 июня 1996 г.). «Пагубное влияние компьютерных тестов на прикладную математику, физику и химию» (PDF) . Архивировано (PDF) из оригинала 13 октября 2013 г.
  43. ^ IEEE 754 2019, §9.2
  44. ^ IEEE 754 2008, пункт 9.
  45. ^ IEEE 754 2019, §9.2.
  46. ^ «Слишком много силы - pow vs powr, powd, pown, rootn, соединение» . grouper.ieee.org . Проверено 16 января 2024 г. Поскольку темпы роста не могут быть меньше -1, такие темпы сигнализируют о недопустимых исключениях.
  47. ^ «Re: Отсутствуют функции tanPi, asinPi и acosPi» . grouper.ieee.org . Архивировано из оригинала 6 июля 2017 г. Проверено 4 апреля 2018 г.
  48. ^ IEEE 754 2008, §9.3.
  49. ^ IEEE 754 2008, §9.4.
  50. ^ IEEE 754 2019, §9.5
  51. ^ Риди, Джейсон; Деммель, Джеймс. «Расширенные арифметические операции, предложенные для IEEE-754 2018» (PDF) . 25-й симбозиум IEEE по компьютерной арифметике (ARITH 2018). стр. 49–56. Архивировано (PDF) из оригинала 23 июля 2019 г. Проверено 23 июля 2019 г.
  52. ^ «ANSI/IEEE Std 754-2019 – Справочные документы» . grouper.ieee.org . Проверено 16 января 2024 г.
  53. ^ IEEE 754 2019, §9.6.
  54. ^ Чен, Дэвид. «Удаление/понижение статуса операций MinNum и MaxNum из IEEE 754™-2018» (PDF) . grouper.ieee.org . Проверено 16 января 2024 г.
  55. ^ IEEE 754 2008, §5.12.
  56. ^ IEEE 754 2008, §5.12.2.
  57. ^ Гей, Дэвид М. (1990-11-30), Правильно округленные двоично-десятичные и десятично-двоичные преобразования, Рукопись численного анализа, Мерри Хилл, Нью-Джерси, США: AT&T Laboratories, 90-10
  58. ^ Паксон, Верн; Кахан, Уильям (22 мая 1991 г.), Программа для тестирования десятично-двоичного преобразования IEEE , рукопись, CiteSeerX 10.1.1.144.5889 
  59. ^ IEEE 754 2008, §5.12.3
  60. ^ «6.9.3. Шестнадцатеричные литералы с плавающей запятой — Компилятор Glasgow Haskell 9.3.20220129 Руководство пользователя» . ghc.gitlab.haskell.org . Проверено 29 января 2022 г.

Стандарты

Вторичные ссылки

дальнейшее чтение

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