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