Арифметическое переполнение - Arithmetic underflow

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

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

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

Разрыв недостаточного перелива

Интервал между -fminN и fminN, куда fminN является наименьшим положительным нормальным значением с плавающей запятой, называется пропуском потери значимости. Это связано с тем, что размер этого интервала на много порядков больше, чем расстояние между соседними нормальными значениями с плавающей запятой сразу за промежутком. Например, если тип данных с плавающей запятой может представлять 20 биты, зазор нижнего перелива равен 221 раз больше, чем абсолютное расстояние между соседними значениями с плавающей запятой сразу за промежутком.[2]

В более старых версиях зазор нижнего перелива имел только одно полезное значение - ноль. При возникновении потери значимости истинный результат заменялся нулем (либо непосредственно аппаратным обеспечением, либо системным программным обеспечением, обрабатывающим первичное состояние потери значимости). Такая замена называется «сброс до нуля».

Издание 1984 г. IEEE 754 представил субнормальные числа. Субнормальные числа (включая ноль) заполняют промежуток недополнения значениями, где абсолютное расстояние между соседними значениями такое же, как для соседних значений сразу за промежутком недополнения. Это позволяет «постепенное истощение», когда используется ближайшее субнормальное значение, так же, как и ближайшее нормальное значение, когда это возможно. Даже при использовании постепенного истощения ближайшее значение может быть нулевым.[3]

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

Обработка недостачи

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

Как указано в IEEE 754, условие недостаточного заполнения сигнализируется только в случае потери точности. Обычно это определяется как неточный конечный результат, однако, если пользователь ловушка при недостаточном заполнении это может произойти независимо от учета потери точности. Обработка по умолчанию в IEEE 754 для потери значимости (а также для других исключений) заключается в записи как состояния с плавающей запятой, что произошло недополнение. Это указано для уровня прикладного программирования, но часто также интерпретируется как то, как с этим справиться на уровне оборудования.

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

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

  1. ^ Кунен, Джером Т (1980). «Руководство по реализации предложенного стандарта для арифметики с плавающей запятой». Компьютер. 13 (1): 68–79. Дои:10.1109 / mc.1980.1653344. S2CID  206445847.
  2. ^ Sun Microsystems (2005). Руководство по численным вычислениям. Oracle. Получено 21 апреля 2018.
  3. ^ Деммель, Джеймс (1984). «Недополнение и надежность численного программного обеспечения». Журнал SIAM по научным и статистическим вычислениям. 5 (4): 887–919. Дои:10.1137/0905062.
  4. ^ Хит, Майкл Т. (2002). Научные вычисления (Второе изд.). Нью-Йорк: Макгроу-Хилл. п. 20. ISBN  0-07-239910-4.