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 года.