Смягчение ошибок с плавающей точкой — это минимизация ошибок, вызванных тем фактом, что действительные числа, в общем случае, не могут быть точно представлены в фиксированном пространстве. По определению, ошибка с плавающей точкой не может быть устранена, и, в лучшем случае, ею можно только управлять.
Хуберто М. Сьерра в своем патенте 1956 года «Средства арифметического управления с плавающей десятичной точкой для калькулятора» отметил: [1]
Таким образом, при некоторых условиях большая часть значимых цифр данных может лежать за пределами емкости регистров. Поэтому полученный результат может иметь мало смысла, если не быть полностью ошибочным.
Z1 , разработанный Конрадом Цузе в 1936 году, был первым компьютером с арифметикой с плавающей точкой и, таким образом, был подвержен ошибкам с плавающей точкой. Однако ранние компьютеры, время работы которых измерялось миллисекундами, были неспособны решать большие, сложные задачи [2] и, таким образом, редко страдали от ошибок с плавающей точкой. Однако сегодня, когда производительность суперкомпьютерных систем измеряется в петафлопсах , ошибки с плавающей точкой являются серьезной проблемой для решателей вычислительных задач.
В следующих разделах описываются сильные и слабые стороны различных средств уменьшения ошибок с плавающей точкой.
Хотя это и не является основным направлением численного анализа , [3] [4] : 5 числовой анализ погрешностей существует для анализа и минимизации ошибок округления чисел с плавающей точкой.
Анализ ошибок с помощью арифметики Монте-Карло выполняется путем многократного внесения небольших ошибок в значения данных алгоритма и определения относительного влияния на результаты.
Расширение точности — это использование более крупных представлений действительных значений, чем изначально рассматривалось. Стандарт IEEE 754 определяет точность как количество цифр, доступных для представления действительных чисел. Язык программирования может включать одинарную точность (32 бита), двойную точность (64 бита) и учетверенную точность (128 бит). Хотя расширение точности делает влияние ошибок менее вероятным или менее важным, истинная точность результатов все еще неизвестна.
Арифметика переменной длины представляет числа как строку цифр переменной длины, ограниченную только доступной памятью. Арифметические операции переменной длины значительно медленнее, чем инструкции с плавающей точкой фиксированной длины. Когда высокая производительность не является требованием, но высокая точность является требованием, арифметика переменной длины может оказаться полезной, хотя фактическая точность результата может быть неизвестна.
Алгоритм с плавающей точкой, известный как TwoSum [5] или 2Sum , созданный Кнутом и Мёллером, и его более простая, но ограниченная версия FastTwoSum или Fast2Sum (3 операции вместо 6) позволяют получить (точный) член ошибки сложения с плавающей точкой, округленный до ближайшего. Можно также получить (точный) член ошибки умножения с плавающей точкой, округленный до ближайшего, за 2 операции с помощью объединенного умножения-сложения (FMA) или за 17 операций, если FMA недоступен (с алгоритмом, созданным Деккером). Эти члены ошибки могут использоваться в алгоритмах для повышения точности конечного результата, например, с помощью расширений с плавающей точкой или компенсированных алгоритмов.
Операции, дающие результат сложения или умножения чисел с плавающей точкой, округленный до ближайшего целого с учетом его погрешности (но несколько отличающийся от алгоритмов, упомянутых выше), были стандартизированы и рекомендованы в стандарте IEEE 754-2019.
Изменение системы счисления , в частности с двоичной на десятичную, может помочь уменьшить погрешность и лучше контролировать округление в некоторых приложениях, например, в финансовых приложениях.
Интервальная арифметика — это математический метод, используемый для ограничения ошибок округления и ошибок измерения в математических вычислениях . Значения — это интервалы, которые могут быть представлены различными способами, например: [6]
«Вместо использования одного числа с плавающей точкой в качестве приближения для значения действительной переменной в исследуемой математической модели интервальная арифметика допускает ограниченную точность, связывая с переменной набор действительных чисел в качестве возможных значений. Для удобства хранения и вычислений эти наборы ограничены интервалами». [7]
Оценка интервального арифметического выражения может обеспечить большой диапазон значений [7] и может серьезно переоценить истинные границы погрешности. [8] : 8
Unums («универсальные числа») — это расширение арифметики переменной длины, предложенное Джоном Густафсоном . [9] Unums имеют поля переменной длины для экспоненты и мантиссы , а информация об ошибке передается в одном бите, ubit, представляющем возможную ошибку в младшем значащем бите мантиссы ( ULP ). [9] : 4
Эффективность унумов подвергается сомнению Уильямом Каханом . [8]
Ограниченная плавающая точка — метод, предложенный и запатентованный Аланом Йоргенсеном. [10] Структура данных включает стандартную структуру данных IEEE 754 и интерпретацию, а также информацию об ошибке между истинным действительным значением, представленным и значением, сохраненным представлением с плавающей точкой. [11]
Ограниченную плавающую точку критиковали как производную от работы Густафсона по числам unum и интервальной арифметике. [10] [12]