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. 1 2 3 4 fenv.h. Дата обращения: 2 июля 2010. Архивировано 19 мая 2009 года.
  2. 1 2 ISO/IEC 9899:1999. Дата обращения: 30 июля 2011. Архивировано 22 августа 2011 года.