Среда вещественной арифметики
Среда вещественной арифметики это набор флагов состояния и режимов управления среды, поддерживаемых реализацией. Они локальны для потока. Каждый поток наследует начальное состояние своей среды вещественной арифметики от родительского потока. Операции с плавающей запятой изменяют флаги состояния среды, чтобы указать аномальные результаты или вспомогательную информацию. Состояние режимов управления средой влияет на результаты некоторых операций с плавающей запятой.
Доступ и изменение среды вещественной арифметики имеют смысл только тогда, когда поддерживается
#pragma STDC FENV_ACCESS и установлена в ON
. В противном случае реализация может предполагать, что режимы управления вещественной арифметикой всегда являются режимами по умолчанию и что флаги состояния вещественной арифметики никогда не тестируются и не изменяются. На практике некоторые современные компиляторы, такие как HP aCC, Oracle Studio или IBM XL, явно поддерживают #pragma
, но большинство компиляторов всё равно разрешают осмысленный доступ к среде вещественной арифметики.
Содержание |
[править] Типы
Определены в заголовочном файле
<cfenv> | |
fenv_t | Тип, представляющий всю среду вещественной арифметики |
fexcept_t | Тип, представляющий все флаги состояния среды вещественной арифметики |
[править] Функции
(C++11) |
очищает указанные флаги состояния среды вещественной арифметики (функция) |
(C++11) |
определяет, какой из указанных флагов состояния вещественной арифметики установлен (функция) |
(C++11) |
вызывает указанные исключения вещественной арифметики (функция) |
(C++11)(C++11) |
копирует состояние указанных флагов состояния из или в среду вещественной арифметики (функция) |
(C++11)(C++11) |
получает или устанавливает направление округления (функция) |
(C++11) |
сохраняет или восстанавливает текущую среду вещественной арифметики (функция) |
(C++11) |
сохраняет среду, очищает все флаги состояния и игнорирует все будущие ошибки (функция) |
(C++11) |
восстанавливает среду вещественной арифметики и вызывает ранее поднятые исключения (функция) |
[править] Макросы
исключения вещественной арифметики (макроконстанта) | |
направление округления с плавающей запятой (макроконстанта) | |
(C++11) |
среда вещественной арифметики по умолчанию (макроконстанта) |
[править] Примечание
Исключения вещественной арифметики не связаны с исключениями C++. Когда операция с плавающей запятой вызывает исключение вещественной арифметики, состояние среды вещественной арифметики изменяется, что можно проверить с помощью std::fetestexcept, но выполнение программы C++ в большинстве реализаций продолжается непрерывно.
Существуют расширения компилятора, которые могут использоваться для автоматической генерации исключений C++ всякий раз, когда возникает исключение вещественной арифметики:
- Функция GNU
feenableexcept()
включает перехват исключений вещественной арифметики, которые генерирует сигналSIGFPE
. Если использовалась опция компилятора-fnon-call-exceptions
, обработчик этого сигнала может вызвать определяемое пользователем исключение C++. - Функция MSVC
_control87()
включает перехват исключений вещественной арифметики, которые создают аппаратные исключения, и которые могут быть преобразованы в исключения C++ с помощью_set_se_translator
.
[править] Смотрите также
Документация C по Среда вещественной арифметики
|