- •Система команд fpu
- •Задание.
- •Лабораторная работа № 8 Вычисления с использованием математического сопроцессора
- •Задание.
- •Лабораторная работа № 9 Представление данных в математическом сопроцессоре
- •Особые случаи
- •1. Неточный результат
- •2. Численное антипереполнение или исчезновение порядка
- •3. Денормализованный операнд
- •4. Деление на нуль
- •5. Численное переполнение
- •6. Недействительная операция
- •Задание.
- •Литература
Особые случаи
При выполнении операций над числами с плавающей точкой иногда возникают некорректные условия, называемые особыми случаями.
Обычная обработка особых случаев заключается в том, чтобы немедленно приостановить выполнение операции и передать управление подпрограмме обработки особого случая.
Такой метод называется специальным прерыванием. По второму методу операция возвращает специальное значение особого случая и выполнение программы продолжается.
Хотя при отладке обычно необходимо точно определить место ошибочных вычислений, что не позволяет второй метод, но наборы для специальных значений выбираются так, чтобы большинство сравнений выполнялось правильно. Кроме этого, если программа получает специальные значения, возможно, что она даст правильный результат, так как вычисления приближенные. То есть можно разрешить продолжать выполнение программы до тех пор, пока это возможно.
С другой стороны, специальные значения просто увеличивают диапазоны представления форматов с плавающей точкой и не считаются ошибочными. Поэтому и применяется термин «особый случай».
В сопроцессорах можно программно выбирать или обработку по прерыванию, или специальное значение индивидуально для каждого случая.
Упорядочим особые случаи по степени тяжести их последствий.
1. Неточный результат
При работе с вещественными числами возникает очень часто, например 1.0/3.010 = 0.01(01)2, или десятичная дробь 0.1 не имеет точного двоичного представления в ЭВМ. Специальным значением здесь является округленный результат, причем аппаратно реализованы 4 режима округления.
1. Усечение, или отбрасывание, или округление в направлении к нулю.
Здесь х – истинный результат;
– число, представимое с плавающей точкой.
2. Округление к ближайшему или по правилам арифметики. Наиболее распространено и принято по умолчанию.
3. Округление в направлении к положительной бесконечности.
4. Округление в направлении к отрицательной бесконечности.
Оба режима используются в интервальной арифметике: программа выполняется два раза при разных режимах. Тогда гарантируется (с оговорками), что истинный результат находится между двумя полученными.
2. Численное антипереполнение или исчезновение порядка
То есть когда ненулевой результат по абсолютной величине слишком мал для представления.
В этом случае поле порядка равно нулю, и появляется специальное значение: старший бит мантиссы 0, а не 1, и число представляется с потерей точности. Это позволяет расширить порядок, например, для одинарной точности от -126 до -149 (в двоичной системе счисления), но точность уменьшается до 1 бита. Такие числа называют денормализованными. Если же результат настолько мал, что его нельзя представить и таким числом, формируется машинный нуль. Такой способ называется постепенным или плавным антипереполнением.
Во некоторых типах процессоров (не Intel) на все антипереполнения формируются нули, то есть в них реализовано резкое антипереполнение.
3. Денормализованный операнд
Этот случай тесно связан с предыдущим. Даже если результат нормализован, он отмечается как подозрительный из-за потери точности.
Например, если число хранится в памяти как положительное целое, а читается как вещественное, то с большой вероятностью оно будет воспринято как денормализованный операнд, хотя при преобразовании к расширенной точности оно нормализуется.
