Введение
Термин арифметический переполнение в нижнюю сторону (также переполнение с плавающей точкой в нижнюю сторону, или просто переполнение в нижнюю сторону) – это состояние в компьютерной программе, при котором результат вычисления представляет собой число с большей точностью абсолютного значения, чем компьютер может фактически представить в памяти на своем центральном процессоре (ЦП). Арифметическое переполнение в нижнюю сторону может произойти, когда истинный результат операции с плавающей точкой имеет меньшую величину (то есть ближе к нулю), чем наименьшее значение, представимое как нормальное число с плавающей точкой в целевом типе данных. Переполнение в нижнюю сторону можно рассматривать как отрицательное переполнение показателя значения с плавающей точкой. Например, если часть экспоненты может представлять значения от −128 до 127, то результат со значением меньше, чем −128 может вызвать переполнение в нижнюю сторону. Для целых чисел термин "переполнение целых чисел в нижнюю сторону" обычно относится к особому виду переполнения целых чисел или условию циклического переполнения целых чисел, при котором результат вычитания приводит к значению, меньшему, чем минимально допустимое для данного типа целых чисел, то есть идеальный результат был ближе к отрицательной бесконечности, чем представимое значение типа вывода, наиболее близкое к отрицательной бесконечности.
Разрыв в нижнем потоке
Интервал между −fminN и fminN, где fminN — наименьшее положительное нормализованное число с плавающей точкой, называется зазором потери значимости. Это происходит потому, что размер этого интервала на много порядков превосходит расстояние между соседними нормализованными числами с плавающей точкой, расположенными непосредственно за пределами этого зазора. Например, если тип данных с плавающей точкой может представлять 20 бит, то зазор потери значимости в 221 раз больше абсолютного расстояния между соседними числами с плавающей точкой, расположенными непосредственно за пределами зазора. В более ранних конструкциях зазор потери значимости содержал только одно полезное значение — ноль. При возникновении потери значимости истинный результат заменялся нулем (непосредственно аппаратным обеспечением или системным программным обеспечением, обрабатывающим основное условие потери значимости). Эта замена называется "обнулением". В редакции IEEE 754 1984 года были введены субнормальные числа. Субнормальные числа (включая ноль) заполняют зазор потери значимости значениями, для которых абсолютное расстояние между соседними значениями такое же, как и для соседних значений, расположенных непосредственно за пределами зазора. Это обеспечивает "постепенную потерю значимости", при которой используется ближайшее субнормальное значение, как и ближайшее нормализованное значение, когда это возможно. Даже при использовании постепенной потери значимости ближайшим значением может оказаться ноль. Абсолютное расстояние между соседними числами с плавающей точкой, расположенными за пределами зазора, называется машинным эпсилоном и обычно характеризуется наибольшим значением, сумма которого с единицей даст в результате единицу в данной схеме представления чисел с плавающей точкой. Это можно записать как , где — функция, преобразующая действительное значение в представление с плавающей точкой. Машинный эпсилон не следует путать с уровнем потери значимости (при условии использования субнормальных чисел), хотя они тесно связаны. Машинный эпсилон зависит от количества бит, составляющих мантиссу, в то время как уровень потери значимости зависит от количества цифр, составляющих поле экспоненты. В большинстве систем с плавающей точкой уровень потери значимости меньше машинного эпсилона.
Обработка нижнего потока
Возникновение переполнения в отрицательную сторону может установить ("липкий") бит состояния, вызвать исключение, на аппаратном уровне сгенерировать прерывание или привести к некоторой комбинации этих эффектов. Как указано в IEEE 754, состояние переполнения в отрицательную сторону сигнализируется только при одновременной потере точности. Обычно это определяется как неточность конечного результата. Однако, если пользователь перехватывает исключение переполнения в отрицательную сторону, это может произойти независимо от проверки на потерю точности. Стандарт IEEE 754 по умолчанию предусматривает запись в статус с плавающей точкой факта возникновения переполнения в отрицательную сторону (а также других исключений). Это определено на уровне программирования приложений, но часто также интерпретируется как способ обработки на аппаратном уровне.