Floating-point environment (since C++11)
Среда чисел с плавающей точкой - это набор флагов состояния и режимов управления числами с плавающей точкой, поддерживаемых реализацией. Она является локальной для потока. Каждый поток наследует начальное состояние своей среды чисел с плавающей точкой от родительского потока. Операции с числами с плавающей точкой изменяют флаги состояния для указания аномальных результатов или вспомогательной информации. Состояние режимов управления числами с плавающей точкой влияет на результаты некоторых операций с числами с плавающей точкой.
Доступ к окружению чисел с плавающей точкой и его модификация имеют смысл только тогда, когда
#pragma STDC FENV_ACCESS
поддерживается и установлен в
ON
. В противном случае реализация может считать, что режимы управления числами с плавающей точкой всегда являются стандартными, а флаги состояния чисел с плавающей точкой никогда не проверяются и не изменяются. На практике лишь немногие современные компиляторы, такие как HP aCC, Oracle Studio или IBM XL, явно поддерживают
#pragma
, однако большинство компиляторов тем не менее позволяют осуществлять осмысленный доступ к окружению чисел с плавающей точкой.
Содержание |
Типы
|
Определено в заголовочном файле
<cfenv>
|
|
|
fenv_t
(C++11)
|
тип, представляющий всю среду с плавающей запятой
(typedef) |
|
fexcept_t
(C++11)
|
тип, представляющий все флаги состояния с плавающей запятой коллективно
(typedef) |
Функции
|
(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 libc
feenableexcept()включает перехват исключений с плавающей точкой, что генерирует сигналSIGFPE. Если использовалась опция компилятора-fnon-call-exceptions, обработчик этого сигнала может выбрасывать пользовательское исключение C++. -
Функция MSVC
_control87()включает перехват исключений с плавающей точкой, что генерирует аппаратное исключение, которое может быть преобразовано в исключения C++ с помощью_set_se_translator.
Смотрите также
|
Документация C
для
Окружения с плавающей точкой
|