fenv.h
fenv.h — заголовочный файл стандартной библиотеки языка Си, содержащий объявление типов данных для работы с числами с плавающей запятой.
Типы данных
Заголовочный файл объявляет типы fenv_t и fexcept_t. Тип fenv_t предоставляет окружение для работы с числами с плавающей запятой. Оно работает с флагами состояния для работы с числами с плавающей запятой и управляет платформо-зависимыми режимами.
Макрос
Заголовочный файл объявляет следующие константы:
FE_DIVBYZERO
FE_INEXACT
FE_INVALID
FE_OVERFLOW
FE_UNDERFLOW
FE_ALL_EXCEPT
FE_DOWNWARD
FE_TONEAREST
FE_TOWARDZERO
FE_UPWARD
FE_DFL_ENV
Макрос FE_ALL_EXCEPT определена если одновременно определены следующие константы: FE_DIVBYZERO, FE_INEXACT, FE_INVALID, FE_OVERFLOW, FE_UNDERFLOW.
Макросы FE_DOWNWARD, FE_TONEAREST, FE_TOWARDZERO, FE_UPWARD определены если платформа поддерживает получение и изменение направления округления в терминах функций fegetround() и fesetround().
Макрос FE_DFL_ENV представляет умалчиваемое окружение вычислений с плавающей точкой.
Функции
Исключения
#include <fenv.h> int feclearexcept(int excepts); int fegetexceptflag(fexcept_t *flagp, int excepts); int feraiseexcept(int excepts); int fesetexceptflag(const fexcept_t *flagp, int excepts); int fetestexcept(int excepts);Перечисленные функции сбрасывают флаги исключений (feclearexcept) и устанавливают их (feraiseexcept), записывают (fesetexceptflag) и получают (fegetexceptflag) машинно-зависимые флаги состояний и производят проверку установки флагов (fetestexcept).
Округление
#include <fenv.h> int fegetround(void); int fesetround(int round);Функции получают и устанавливают макрос, отвечающий за направление округления.
Поддержка окружения
#include <fenv.h> int fegetenv(fenv_t *envp); int feholdexcept(fenv_t *envp); int fesetenv(const fenv_t *envp); int feupdateenv(const fenv_t *envp);Функции получают окружение для вычислений с плавающей точкой, сохраняют его в переменной, устанавливают новое значение и обновляют его соответственно.
Директивы компилятора
#include <fenv.h> #pragma STDC FENV_ACCESS on-off-switchДиректива сообщает окружению (или компилятору), что эта часть кода обращается к платформо-зависимым флагам состояния для операций с типом float.
Пример:
#include <fenv.h> void f (double x) { #pragma STDC FENV_ACCESS ON void g (double); void h (double); /*...*/ g(x+1); h(x+1); /*...*/ }Поведение функции g и h может зависеть от флагов состояния или побочных эффектов от операций x+1.



















