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]

Примечания[править | править код]