Namespaces
Variants

Floating-point environment (since C++11)

From cppreference.net
Floating-point environment
Functions
(C++11) (C++11)
(C++11) (C++11)
Macro constants
(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++. Когда операция с плавающей точкой вызывает исключение с плавающей точкой, статус окружения с плавающей точкой изменяется, что можно проверить с помощью std::fetestexcept , но выполнение программы на C++ в большинстве реализаций продолжается без прерывания.

Существуют расширения компилятора, которые могут использоваться для автоматической генерации исключений C++ при возникновении исключения с плавающей запятой:

  • Функция GNU libc feenableexcept() включает перехват исключений с плавающей точкой, что генерирует сигнал SIGFPE . Если использовалась опция компилятора -fnon-call-exceptions , обработчик этого сигнала может выбрасывать пользовательское исключение C++.
  • Функция MSVC _control87() включает перехват исключений с плавающей точкой, что генерирует аппаратное исключение, которое может быть преобразовано в исключения C++ с помощью _set_se_translator .

Смотрите также

Документация C для Окружения с плавающей точкой