fenv.h — Википедия
fenv.h — заголовочный файл стандартной библиотеки языка Си, содержащий объявление типов данных для работы с числами с плавающей запятой.[1]
Типы данных
[править | править код]Заголовочный файл объявляет типы fenv_t
и fexcept_t
.[1] Тип fenv_t
предоставляет окружение для работы с числами с плавающей запятой. Оно работает с флагами состояния для работы с числами с плавающей запятой и управляет платформо-зависимыми режимами.[1]
Макрос
[править | править код]Заголовочный файл объявляет следующие константы:[1]
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
.[2]
Пример:
#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
.[2]
Примечания
[править | править код]- ↑ 1 2 3 4 fenv.h . Дата обращения: 2 июля 2010. Архивировано 19 мая 2009 года.
- ↑ 1 2 ISO/IEC 9899:1999 . Дата обращения: 30 июля 2011. Архивировано 22 августа 2011 года.