Повышенная точность - Википедия - Extended precision

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

Реализации повышенной точности

Существует долгая история расширенных форматов с плавающей запятой, уходящая корнями почти в середину прошлого века. Различные производители использовали разные форматы для повышения точности для разных станков. Во многих случаях формат расширенной точности не совсем то же самое, что масштабирование обычных форматов с одинарной и двойной точностью, которые он предназначен для расширения. В некоторых случаях реализация была просто программным изменением формата данных с плавающей запятой, но в большинстве случаев повышенная точность была реализована аппаратно, либо встроенной в центральный процессор сам или, что чаще, встроен в оборудование дополнительного подключенного процессора, называемого "блок с плавающей запятой "(FPU) или" процессор с плавающей запятой "(FPP ), доступный для ЦПУ как устройство быстрого ввода / вывода.

Форматы расширенной точности IBM

В IBM 1130, продана в 1965 г.,[2] предлагает два формата с плавающей запятой: 32-битный формат «стандартной точности» и 40-битный формат «расширенной точности». Формат стандартной точности содержит 24-битный два дополнения значимое в то время как повышенная точность использует 32-битный два дополнения значимое. Последний формат полностью использует 32-битные целочисленные операции ЦП. Характеристика в обоих форматах - это 8-битное поле, содержащее степень двойки. пристрастный на 128. Арифметические операции с плавающей запятой выполняются программным обеспечением, и двойная точность не поддерживается вообще. Расширенный формат занимает три 16-битных слова, а лишнее пространство просто игнорируется.[3]

В IBM System / 360 поддерживает 32-битный «короткий» формат с плавающей запятой и 64-битный «длинный» формат с плавающей запятой.[4] 360/85 и последующие модели Система / 370 добавить поддержку 128-битного «расширенного» формата.[5] Эти форматы по-прежнему поддерживаются в текущем дизайн, где они теперь называются "шестнадцатеричный с плавающей запятой "(HFP) форматы.

Формат расширенной точности Microsoft MBF

В Microsoft BASIC порт для 6502 CPU, например, в таких адаптациях, как Commodore BASIC, AppleSoft BASIC, КИМ-1 БАЗОВЫЙ или же MicroTAN BASIC, поддерживает расширенный 40-битный вариант формата с плавающей запятой Двоичный формат Microsoft (MBF) с 1977 года.[6]

Форматы повышенной точности IEEE 754

В IEEE 754 Стандарт с плавающей запятой рекомендует, чтобы реализации обеспечивали форматы с расширенной точностью. Стандарт определяет минимальные требования для расширенного формата, но не определяет кодировку.[7] Кодировка - выбор разработчика.[8]

В IA32, x86-64, и Itanium процессоры поддерживают 80-битный "двойной расширенный" формат повышенной точности с 64-битным значением. В Intel 8087 математика сопроцессор был первым x86 устройство, которое аппаратно поддерживает арифметику с плавающей запятой. Он был разработан для поддержки 32-битного формата «одинарной точности» и 64-битного формата «двойной точности» для кодирования и перестановки чисел с плавающей запятой. Временный реальный (расширенный) формат был разработан не для хранения данных с более высокой точностью как таковой, а в первую очередь для обеспечения более надежного и точного вычисления двойных результатов за счет минимизации ошибок переполнения и округления в промежуточных вычислениях.[а][10][11] Например, многие алгоритмы с плавающей запятой (например, возведение в степень ) страдают от значительной потери точности при вычислении с использованием наиболее прямых реализаций. Чтобы смягчить такие проблемы, внутренние регистры в 8087 были разработаны для хранения промежуточных результатов в 80-битном формате «повышенной точности». 8087 автоматически преобразует числа в этот формат при загрузке регистров с плавающей запятой из объем памяти а также преобразует результаты обратно в более традиционные форматы при сохранении регистров обратно в память. Чтобы обеспечить возможность сохранения промежуточных результатов подвыражения в временных переменных повышенной точности и продолжения в операторах языка программирования, а также для возобновления прерванных вычислений с того места, где они были прерваны, он предоставляет инструкции которые передают значения между этими внутренними регистрами и памятью без выполнения какого-либо преобразования, что, таким образом, обеспечивает доступ к расширенному формату для вычислений[b] - также возрождает вопрос о точности функций таких чисел, но с большей точностью.

В единицы с плавающей запятой (FPU) на всех последующих x86 процессоры поддерживают этот формат. В результате может быть разработано программное обеспечение, использующее более высокую точность, обеспечиваемую этим форматом. Уильям Кахан, основной разработчик арифметики x87 и первоначальные предложения по стандарту IEEE 754, примечания по разработке плавающей запятой x87: «Расширенный формат настолько широкий, насколько мы осмелились (80 бит), был включен для выполнения той же вспомогательной роли, что и 13 десятичных внутренних формат используется в десятичных калькуляторах Hewlett-Packard ».[13] Более того, Кахан отмечает, что 64 бита были самым широким значением, по которому распространение переноса могло быть выполнено без увеличения времени цикла на 8087,[14] и что повышенная точность x87 была разработана с целью повышения точности в будущих процессорах: «На данный момент 10-байтовый расширенный формат это приемлемый компромисс между ценностью сверхточной арифметики и ценой ее реализации для быстрой работы; очень скоро еще два байта точности станут допустимыми, и в конечном итоге 16-байтовый формат. ... Такая постепенная эволюция в сторону большей точности уже рассматривалась, когда Стандарт IEEE 754 для арифметики с плавающей запятой был оформлен ".[15]

В Motorola 6888x математические сопроцессоры и Motorola 68040 и 68060 процессоры поддерживают тот же 64-битный тип значащей расширенной точности (похожий на формат Intel, но дополненный до 96-битного формата с 16 неиспользуемыми битами, вставленными между полями экспоненты и значащей[16]). Последующие Холодный огонь процессоры не поддерживают этот 96-битный формат повышенной точности.[17]

Математический сопроцессор FPA10 для раннего РУКА процессоры также поддерживают этот тип повышенной точности (аналогичный формату Intel, но с дополнением до 96-битного формата с 16 нулевыми битами, вставленными между полями знака и экспоненты), но без правильного округления.[18]

80-битные форматы x87 и Motorola 68881 соответствуют требованиям двойного расширенного формата IEEE 754,[19] как и IEEE 754 128 бит формат.

x86 формат повышенной точности

Формат расширенной точности x86 - это 80-битный формат, впервые реализованный в Intel 8087 математика сопроцессор и поддерживается всеми процессорами, основанными на x86 дизайн которые включают блок с плавающей запятой (FPU). Этот 80-битный формат использует один бит для знака мантиссы, 15 бит для поля экспоненты (то есть тот же диапазон, что и 128-битный формат IEEE 754 с четырехкратной точностью ) и 64 бита для мантиссы. Поле экспоненты пристрастный на 16383, что означает, что 16383 нужно вычесть из значения в поле экспоненты, чтобы вычислить фактическую степень двойки.[20] Значение поля экспоненты 32767 (все пятнадцать бит 1) зарезервировано, чтобы обеспечить представление особых состояний, таких как бесконечность и Не число. Если поле экспоненты равно нулю, значение равно ненормальный число и показатель степени 2 равны −16382.[21]

X86 Extended Floating Point Format.svg

В следующей таблице "s"- значение знакового бита (0 означает положительное, 1 означает отрицательное),"е"- значение поля экспоненты, интерпретируемое как положительное целое число, и"м"- мантисса, интерпретируемая как положительное двоичное число, где двоичная точка расположена между битами 63 и 62."мПоле "представляет собой комбинацию целой и дробной частей на диаграмме выше.

Интерпретация полей значения расширенной точности x86
ЭкспонентаЗначительныйСмысл
Все нулиБит 63Биты 62-0
НульНульНуль. Знаковый бит дает знак нуля.
НенулевойДенормальный. Ценность (−1)s × м × 2−16382
ОдинЧто-либоПсевдо денормальный. 80387 и более поздние версии правильно интерпретируют это значение, но не генерируют его. Ценность (−1)s × м × 2−16382
ВсеБиты 63,62Биты 61-0
00НульПсевдо-бесконечность. Знаковый бит дает знак бесконечности. 8087 и 80287 рассматривают это как бесконечность. 80387 и более поздние версии обрабатывают это как недопустимый операнд.
НенулевойПсевдо - не число. Знаковый бит не имеет смысла. 8087 и 80287 рассматривают это как сигнал, а не число. 80387 и более поздние версии обрабатывают это как недопустимый операнд.
01Что-либоПсевдо не число. Знаковый бит не имеет смысла. 8087 и 80287 рассматривают это как сигнал, а не число. 80387 и более поздние версии обрабатывают это как недопустимый операнд.
10НульБесконечность. Знаковый бит дает знак бесконечности. 8087 и 80287 рассматривают это как сигнал, а не число. Сопроцессоры 8087 и 80287 использовали представление псевдобесконечности для бесконечностей.
НенулевойСигнализация - это не число, знаковый бит не имеет смысла.
11НульНеопределенный с плавающей запятой, результат неверных вычислений, таких как квадратный корень из отрицательного числа, логарифм отрицательного числа, 0/0, бесконечность / бесконечность, бесконечность, умноженная на 0, и другие, когда процессор был настроен так, чтобы не генерировать исключения для недопустимые операнды. Знаковый бит не имеет смысла. Это частный случай Тихого, а не числа.
НенулевойQuiet Not a Number, бит знака не имеет смысла. 8087 и 80287 рассматривают это как сигнал, а не число.
Все остальные значенияБит 63Биты 62-0
НульЧто-либоНенормально. Генерируется только на 8087 и 80287. 80387 и более поздние версии обрабатывают это как недопустимый операнд. Ценность (−1)s × м × 2е−16383
ОдинЧто-либоНормализованное значение. Ценность (−1)s × м × 2е−16383

В отличие от Один и двойная точность форматов, в этом формате не используется неявный /скрытый бит. Напротив, бит 63 содержит целую часть мантиссы, а биты 62-0 содержат дробную часть. Бит 63 будет равен 1 для всех нормализованных чисел. У этой конструкции было несколько преимуществ, когда 8087 разрабатывался:

  • Вычисления могут быть выполнены немного быстрее, если в регистре присутствуют все биты мантиссы.
  • 64-битное значение обеспечивает достаточную точность, чтобы избежать потери точности при преобразовании результатов обратно в формат двойной точности в огромном количестве случаев.
  • Этот формат обеспечивает механизм для индикации потери точности из-за потери значимости, которая может быть перенесена в дальнейшие операции. Например, расчет 2×10−4930 × 3×10−10 × 4×1020 генерирует промежуточный результат 6×10−4940 который является ненормальный а также влечет за собой потерю точности. Результатом всех условий является 24×10−4920 которое можно представить как нормализованное число. В 80287 может завершить это вычисление и указать потерю точности, вернув «ненормальный» результат (показатель степени не равен 0, бит 63 = 0).[22][23] Процессоры с 80387 больше не генерируют аномалии и не поддерживают нестандартные входные данные для операций. Они будут генерировать денормализацию, если происходит потеря значимости, но будут генерировать нормализованный результат, если последующие операции над денормализацией могут быть нормализованы.[24]

Введение в использование

80-битный формат с плавающей запятой был широко доступен к 1984 году,[25] после разработки C, Fortran и подобных компьютерных языков, которые изначально предлагали только общие 32- и 64-разрядные размеры с плавающей запятой. На x86 дизайн наиболее C компиляторы теперь поддерживают 80-битную расширенную точность через длинный двойной тип, и это было указано в C99 / C11 стандартов (арифметика с плавающей запятой IEC 60559 (приложение F)). Компиляторы на x86 для других языков часто также поддерживают повышенную точность, иногда с помощью нестандартных расширений: например, Турбо Паскаль предлагает расширенный типа и несколько Фортран компиляторы имеют РЕАЛЬНЫЙ * 10 тип (аналог РЕАЛЬНЫЙ * 4 и РЕАЛЬНЫЙ * 8). Такие компиляторы также обычно включают математические подпрограммы, Такие как квадратный корень и тригонометрические функции, в своем стандарте библиотеки.

Рабочий диапазон

80-битный формат с плавающей запятой имеет диапазон (включая субнормальные ) примерно от 3,65 × 10−4951 до 1,18 × 104932. Хотя журнал10(264) ≅ 19.266, этот формат обычно описывается как обеспечивающий приблизительно восемнадцать значащих цифр точности. Использование десятичного числа при разговоре о двоичном коде неудачно, потому что большинство десятичных дробей являются повторяющимися последовательностями в двоичном формате, как 2/3 - в десятичном. Таким образом, такое значение, как 10,15, представлено в двоичном виде как эквивалент 10,1499996185 и т. Д. В десятичном виде для REAL * 4, но 10,15000000000000035527 и т. Д. в REAL * 8: взаимное преобразование будет включать приближение, за исключением тех немногих десятичных дробей, которые представляют точное двоичное значение, например 0,625. Для REAL * 10 десятичная строка - 10,1499999999999999996530553 и т. Д. Последние 9 цифр - это восемнадцатая дробная цифра и, следовательно, двадцатая значащая цифра строки. Границы преобразования между десятичным и двоичным форматом для 80-битного формата могут быть заданы следующим образом: если десятичная строка с не более чем 18 значащими цифрами правильно округлена до 80-битного двоичного значения с плавающей запятой IEEE 754 (как на входе), тогда преобразован обратно в то же количество значащих десятичных цифр (как для вывода), тогда окончательная строка будет точно соответствовать исходной; в то время как, наоборот, если 80-битное двоичное значение с плавающей запятой IEEE 754 правильно преобразовано и (ближайшее) округлено до десятичной строки с как минимум 21 значащей десятичной цифрой, а затем преобразовано обратно в двоичный формат, оно будет точно соответствовать оригиналу.[19] Эти приближения вызывают особые затруднения при указании наилучшего значения для констант в формулах с высокой точностью, которые можно вычислить с помощью арифметика произвольной точности.

Потребность в 80-битном формате

Яркий пример необходимость минимум 64 бит точности в мантиссе формата расширенной точности - необходимость избежать потери точности при выполнении возведения в степень на двойная точность значения.[26][27][28][c] В x86 блоки с плавающей запятой не предоставляют инструкции, которые непосредственно выполняют возведение в степень. Вместо этого они предоставляют набор инструкций, которые программа может последовательно использовать для выполнения возведения в степень с использованием уравнения:

Во избежание потери точности промежуточные результаты "бревно2(Икс)" и "y·бревно2(Икс)"должны быть вычислены с гораздо более высокой точностью, потому что, по сути, и экспоненты, и значащие поля Икс должно соответствовать значимости промежуточного результата. Впоследствии поле значимости промежуточного результата разделяется между полями экспоненты и значимости конечного результата, когда 2промежуточный результат рассчитывается. Следующее обсуждение описывает это требование более подробно.

Немного распаковав, IEEE 754 двойная точность значение может быть представлено как:

куда s - знак экспоненты (0 или 1), E - несмещенная экспонента, представляющая собой целое число от 0 до 1023, и M - мантисса, представляющая собой 53-битное значение, попадающее в диапазон 1 ≤ M < 2. Отрицательные числа и ноль можно игнорировать, поскольку логарифм этих значений не определен. Для целей этого обсуждения M не имеет 53 бита точности, потому что он ограничен быть больше или равным единице, то есть скрытый бит не учитывается в точности (обратите внимание, что в ситуациях, когда M меньше 1, значение на самом деле является ненормальным и, следовательно, уже может иметь потерю точности. Эта ситуация выходит за рамки данной статьи).

Записывая это представление двойная точность число и упрощение приводит к следующему:

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

Потому что E является целым числом в диапазоне от 0 до 1023, для представления целой части логарифма требуется до 10 бит слева от точки счисления. Потому что M попадает в диапазон 1 ≤ M < 2, значение бревно2 M попадет в диапазон 0 ≤ журнал2 M < 1 поэтому для представления дробной части логарифма требуется не менее 52 бита справа от точки счисления. Объединение 10 битов слева от точки счисления с 52 битами справа от точки счисления означает, что значимая часть логарифма должна быть вычислена с точностью не менее 62 бит. На практике значения M меньше, чем требует 53 бита справа от точки счисления и значений M меньше, чем требуется 54 бита справа от точки счисления, чтобы избежать потери точности. Уравновешивая это требование для дополнительной точности справа от точки счисления, для экспонентов меньше 512 требуется только 9 бит слева от точки счисления, а для показателей меньше 256 требуется только 8 бит слева от точки счисления.

Заключительная часть возведение в степень вычисление вычисляет 2промежуточный результат. «Промежуточный результат» состоит из целой части »я"добавлено в дробную часть"F". Если промежуточный результат отрицательный, то требуется небольшая корректировка, чтобы получить положительную дробную часть, потому что и то, и другое"я" и "F"отрицательные числа.

Для положительных промежуточных результатов:

При отрицательных промежуточных результатах:

Таким образом, целая часть промежуточного результата ("я" или же "я−1") плюс смещение становится показателем конечного результата и преобразуется в положительную дробную часть промежуточного результата: 2F или же 21+F становится знаменателем окончательного результата. Чтобы обеспечить точность 52 бита для окончательного результата, положительная дробная часть должна быть сохранена на уровне не менее 52 бита.

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

Количество бит, необходимое для экспоненты формата расширенной точности следует из требования, чтобы произведение двух двойная точность числа не должны переполняться при вычислении с использованием расширенного формата. Наибольший возможный показатель двойная точность значение 1023, поэтому показатель степени наибольшего возможного произведения двух двойная точность числа - 2047 (11-битное значение). Добавление смещения для учета отрицательных показателей степени означает, что поле экспоненты должно иметь ширину не менее 12 бит.

Сочетание этих требований: 1 бит для знака, 12 бит для смещенной экспоненты и 64 бита для мантиссы означает, что для формата с расширенной точностью потребуется не менее 77 бит. Инженерные соображения привели к окончательному определению 80-битного формата (в частности, стандарт IEEE 754 требует, чтобы диапазон экспоненты формата расширенной точности соответствовал следующему по величине, четырехъядерный, формат точности 15 бит).[27]

Другой пример вычислений, в которых используется арифметика повышенной точности: итеративное уточнение схемы, используемые для косвенной очистки ошибок, накопленных в прямом решении во время обычно очень большого количества вычислений, выполняемых для числовой линейной алгебры.[30]

Языковая поддержка

  • Немного C /C ++ реализации (например, Коллекция компиляторов GNU (GCC), Лязг, Intel C ++ ) воплощать в жизнь длинный двойной с использованием 80-битных чисел с плавающей запятой в системах x86. Однако это поведение определяется реализацией и не требуется, но разрешено стандартом, как указано для оборудования IEEE 754 в C99 стандарт «Приложение F IEC 60559 арифметика с плавающей запятой». GCC также предоставляет __float80 и __float128 типы.[31]
  • D язык программирования реализует настоящий используя самый большой размер с плавающей запятой, реализованный на оборудовании, 80 бит для x86 ЦП или двойная точность, в зависимости от того, что больше.
  • Object Pascal (Delphi ) имеет в дополнение к SINGLE и DOUBLE тип EXTENDED.
  • В Ракетка система времени выполнения предоставляет 80-битный тип данных extflonum в системах x86.
  • В Быстрый стандартная библиотека предоставляет Поплавок80 тип данных.
  • В PowerBASIC Компилятор BASIC предоставляет EXT или же РАСШИРЕННЫЙ 10 байт Тип данных с плавающей запятой повышенной точности.

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

Сноски

  1. ^ "Этот формат предназначен главным образом для того, чтобы помочь программистам повысить целостность их одинарного и двойного программного обеспечения и уменьшить деградацию за счет округления в двойных матричных вычислениях больших размеров, и его можно легко использовать таким образом, чтобы заменить четырехкратную замену расширенных потребностей никогда не отменять его использование ". - дизайнер x87 В. Кахан[9]
  2. ^ «Языки высокого уровня будут использовать расширенный (невидимый) для оценки промежуточных подвыражений, а позже могут предоставлять расширенный как декларируемый тип данных».[12](стр70)
  3. ^ "Наличие по крайней мере такого же количества дополнительных битов точности в расширенном, как и в поле экспоненты основного формата, который он поддерживает, значительно упрощает точное вычисление трансцендентных функций, внутренних произведений и степенной функции. yИкс."[29](стр70)

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

  1. ^ IEEE 754 (2008 г., ¶ 2.1.21) определяет формат повышенной точности как «Формат, расширяющий поддерживаемый базовый формат, обеспечивая более широкую точность и диапазон».
  2. ^ Фрэнсис, К. (11 февраля 1965 г.). «IBM представляет мощный маленький компьютер». Директор по информации (пресс-релиз). Уайт-Плейнс, Нью-Йорк: Международная корпорация бизнес-машин (IBM). Архивировано из оригинал на 2019-07-05.
  3. ^ Библиотека подпрограмм (PDF). IBM 1130 (9-е изд.). Корпорация IBM. 1974. стр. 93.
  4. ^ Принцип работы. IBM System / 360 (9-е изд.). Корпорация IBM. 1970. стр. 41.
  5. ^ IBM System / 370 Принципы работы (7-е изд.). Корпорация IBM. 1980. С. 9-2–9-3.
  6. ^ Стейл, Майкл (2008-10-20). «Создайте свою собственную версию Microsoft BASIC для 6502». pagetable.com. п. 46. В архиве из оригинала на 30.05.2016. Получено 2016-05-30.
  7. ^ IEEE Computer Society (29 августа 2008 г.). Стандарт IEEE для арифметики с плавающей запятой (Отчет). IEEE. §3.7. Дои:10.1109 / IEEESTD.2008.4610935. ISBN  978-0-7381-5752-8. IEEE Std 754-2008.
  8. ^ Брюэр, Кевин. "Отчет Кевина". Справочный материал IEEE-754. Получено 2012-02-19.
  9. ^ Кахан, Уильям (1 октября 1997 г.). «Лекционные заметки о статусе стандарта IEEE 754 для двоичной арифметики с плавающей запятой» (PDF). п. 5.
  10. ^ Эйнарссон, Бо (2005). Точность и надежность в научных вычислениях. СИАМ. стр. 9 и далее. ISBN  978-0-89871-815-7. Получено 3 мая 2013.
  11. ^ «Архитектуры Intel 64 и IA-32». Руководство разработчика программного обеспечения. Intel Corp. Март 2012 г. §8.2.
  12. ^ Кунен, Джером Т. (январь 1980 г.). «Руководство по реализации предлагаемого стандарта для арифметики с плавающей запятой». IEEE Computer: 68–79.
  13. ^ Кахан, Уильям (22 ноября 1983 г.). «Математика, написанная песком - hp-15C, Intel 8087 и т. Д.» (PDF).
  14. ^ Гольдберг, Дэвид (март 1991). «Что должен знать каждый компьютерный ученый об арифметике с плавающей запятой» (PDF). Опросы ACM Computing. 23 (1): 192.
  15. ^ Хайэм, Николас (2002). «Разработка стабильных алгоритмов». Точность и стабильность численных алгоритмов. (2-е изд.). Общество промышленной и прикладной математики (SIAM). п. 43.
  16. ^ Семейство Motorola MC68000 (PDF). Справочное руководство для программистов. Freescale Semiconductor. 1992. С. 1–16.
  17. ^ Семья ColdFire (PDF). Справочное руководство для программистов. Freescale Semiconductor. 2005. с. 7-7.
  18. ^ «Лист данных FPA10» (PDF). chrisacorns.computinghistory.org.uk. GEC Plessey Semiconductors. 11 июня 1993 г.. Получено 26 ноября 2020.
  19. ^ а б Кахан, Уильям (1 октября 1997 г.). «Лекционные заметки о статусе стандарта IEEE 754 для двоичной арифметики с плавающей запятой» (PDF).
  20. ^ Лист данных Intel 80C187
  21. ^ Руководство разработчика архитектур Intel 64 и IA-32: Vol. 1. Корпорация Intel. стр. с 4-6 по 4-9 и с 4-18 по 4-21.
  22. ^ Палмер, Джон Ф .; Морс, Стивен П. (1984). Праймер 8087. Wiley Press. стр.14. ISBN  0-471-87569-4.
  23. ^ Морс, Стивен П .; Альберт, Дуглас Дж. (1986). Архитектура 80286. Wiley Press. стр.91 –111. ISBN  0-471-83185-9.
  24. ^ Руководство разработчика архитектур Intel 64 и IA-32: Vol. 1. Корпорация Intel. С 8-21 по 8-22.
  25. ^ Чарльз Северанс (20 февраля 1998 г.). "Интервью со Стариком Плавающей точки".
  26. ^ Палмер, Джон Ф .; Морс, Стивен П. (1984). Праймер 8087. Wiley Press. стр.16. ISBN  0-471-87569-4.
  27. ^ а б Морс, Стивен П .; Альберт, Дуглас Дж. (1986). Архитектура 80286. Wiley Press. стр.96 –98. ISBN  0-471-83185-9.
  28. ^ Хью, Дэвид (март 1981). «Применение предложенного стандарта IEEE 754 для арифметики с плавающей запятой». IEEE Computer. 14 (3): 70–74. Дои:10.1109 / C-M.1981.220381.
  29. ^ Кунен, Джером Т. (январь 1980 г.). «Руководство по реализации предлагаемого стандарта арифметики с плавающей запятой». IEEE Computer: 68–79.
  30. ^ Деммель, Джеймс; Хида, Йозо; Кахан, Уильям; Ли, Сяое С.; Мукерджи, Сонил; Риди, Э. Джейсон (июнь 2006 г.). «Границы ошибок от сверхточного итеративного уточнения» (PDF). Транзакции ACM на математическом ПО. 32 (2): 325–351. Дои:10.1145/1141885.1141894. Получено 2014-04-18.
  31. ^ https://gcc.gnu.org/onlinedocs/gcc/Floating-Types.html