- •5. Модель программирования с плавающей точкой.
- •5.1. Форматы и типы данных
- •5.1.1. Типы действительных чисел
- •5.1.2. Формат регистра с плавающей точкой
- •5.1.3. Представление значений в регистрах с плавающей точкой
- •5.2. Регистр состояния с плавающей точкой
- •5.3. Инструкции с плавающей точкой
- •5.3.1. Инструкции доступа к памяти
- •5.3.2. Инструкции обмена между регистрами с плавающей точкой и основными регистрами
- •5.3.3. Арифметические инструкции
- •5.3.4. Неарифметические инструкции
- •5.3.5. Инструкции поля состояния для регистра состояния с плавающей точкой (fpsr)
- •5.3.6. Инструкции целочисленного умножения и сложения
- •5.4. Дополнительные обсуждения в связи с ieee
- •5.4.1. Прерывания с плавающей точкой
- •5.4.1.1. Ошибка: Недоступный регистр с плавающей точкой
- •5.4.1.2. Ошибка: Исключение с плавающей точкой
- •5.4.1.3. Ловушка «Исключение с плавающей точкой»
- •5.4.2. Определение Переполнения
- •5.4.3. Определение Крошечности, Неточности и Антипереполнения.
- •5.4.4. Целочисленные неверные операции
- •5.4.5. Определение целочисленных операций
- •5.4.6. Определение и распространение значений.
- •5.4.7. Операции, предписанные стандартом ieee, отложенные программно
- •5.4.8. Дополнения сверх стандарта ieee
5.4.2. Определение Переполнения
Исключение переполнения может произойти всегда, когда округленный истинный результат превышает по величине наибольшее максимальное число в формате приемника.
IEEEловушка «Исключение: Переполнение с плавающей точкой» блокирует ответ для всех нормальных и параллельныхFPинструкций, а вместо этого возвращает либо бесконечность, либо корректное знаковое значение, максимально допустимое для точности приемника. Это зависит от режима округления, знака результата и операции. О потере точности результата сигнализируется соответствующему исключению.
IEEEловушка «Исключение: Переполнение с плавающей точкой» допускает ответ для всех нормальных арифметических инструкций, который возвращает истинное смещенное значение порядка по модулю 217, а для всех параллельныхFPарифметических инструкций, который возвращает истинное смещенное значение порядка по модулю 28. Значение мантиссы округляется к заданной точности и записывается в приемный регистр. Если округленное значение отличается от абсолютно точного значения, то отмечается потеря точности. Если мантисса была округлена добавлением единицы в самый младший бит, то устанавливается битfpa=1 в полеISR.code. В конце происходит вызов прерывания из-за ловушки «Исключение с плавающей точкой».
Заметим, что когда округляются вещественные числа с одинарной, двойной или двойной расширенной точностью, то ловушка переполнения допускает ответ для нормальных (не параллельных FP) арифметических инструкций, который гарантировано, не будет в диапазоне правильно соответствующем вещественному числу с одинарной, двойной или двойной расширенной точностью, поскольку результат будет иметь 17-битовый формат порядка.
5.4.3. Определение Крошечности, Неточности и Антипереполнения.
Крошечность(Tininess) выявляется после округления и объявляется, когда выяснилось, что результат не является нулевым (вычислен, как если бы диапазон порядка был не ограничен), но при этом находится в пределах от +2Eminдо –2Emin. (О значенияхEminдля каждого вещественного типа см. табл.5.1). Создание крошечного результата может, позднее, вызвать исключение (такое как переполнение при делении на очень маленький результат).
Неточность(Inexactness) – это такой случай, когда результат отличается от того, что было бы вычислено, если бы и диапазон порядка, и точность были бы неограниченны.
Как крошечность, так и неточность, запускают исключение антипереполнения в зависимости от того, разрешена или запрещена ловушка «Исключение: Антипереполнение с плавающей точкой». Если ловушка запрещена, то исключение антипереполнения отмечается, когда результат является и крошечным, и неточным. Если ловушка разрешена, то исключение антипереполнения отмечается, когда результат является крошечным, не зависимо от неточности. Заметим, что в случае, если запрещена ловушка «Исключение: Антипереполнение с плавающей точкой» и есть крошечность, но нет неточности, то не отмечается ни крошечность, ни неточность, а результат является денормализованным.
IEEEловушка «Исключение: Антипереполнение с плавающей точкой» запрещающая ответ, для всех нормальных и параллельныхFPарифметических инструкций, денормализует абсолютно точный результат, а затем округляет его к точности приемника. Результат может быть денормализованным, нулевым или нормализованным. Если необходимо, то отмечается исключение потери точности.
IEEEловушка «Исключение: Антипереполнение с плавающей точкой» разрешающая ответ, для всех нормальных арифметических инструкций, возвращает истинное смещенное значение порядка по модулю 217, а для параллельныхFPарифметических инструкций, возвращает истинное смещенное значение порядка по модулю 28. Мантисса округляется к заданной точности и записывается в приемный регистр, не зависимо от возможности требования переноса при вычислении порядка. Если округленное значение отличается от абсолютно точного значения, то отмечается неточность. Если мантисса была округлена добавлением единицы к младшему значащему биту, то битfpaв полеISR.codeустанавливается в 1. В конце происходит вызов прерывания из-за ловушки «Исключение с плавающей точкой».
Примечание. При округлении вещественных к одинарной, двойной или двойной расширенной точности, ловушка антипереполнения, допускающая ответ для всех нормальных (не параллельныхFP) арифметических инструкций, не гарантирует, что ответ действительно имеет диапазон одинарной, двойной или двойной расширенной точности, поскольку он реально имеет 17-битовый формат порядка.
Если разрешен режим FTZ(FlushToZero– стремления к нулю), то поведение крошечных результатов различно. Если инструкция выдает крошечный результат, то вместо него подставляется корректный знаковый ноль, и устанавливаются биты в соответствующих поляхFPSR.sx.uиFPSR.sx.i. Этот режим может улучшить эффективность при выполнении, которое не является предметом обработки денормализации в аппаратных средствах. Если разрешен режимFTZ, то при возникновении крошечных результатов, не будут вызываться ловушки, содействующие программному исключению с плавающей точкой.