Библиотека вычислений с плавающей точкой

В заголовке <fenv.h> версии С99 объявляются функции, I которые имеют доступ к среде вычислений с плавающей точкой. Эти функции описаны ниже.

Функция Назначение
void feclearexcept(int ex); Очищает исключения, заданные параметром ex
void fegetexceptflag(fexcept_t *fptr, int ex); Сохраняет в переменной, адресуемой указателем fptr, состояние флагов исключений среды вычислений с плавающей точкой, заданное параметром ех
void feraiseexcept(int ex); Возбуждает исключения, заданные параметром ех
void fesetexceptflag(fexcept_t *fptr, int ex); Устанавливает флаги состояния исключений среды вычислений с плавающей точкой, заданные параметром ех, в соответствии с состоянием флагов в объекте, адресуемом параметром fptr
int fetestexcept(int ex); Выполняет операцию поразрядного ИЛИ для исключений, заданных параметром ех, и текущих флагов состояния исключений среды вычислений с плавающей точкой. Возвращает результат этой операции
int fegetround(void); Возвращает значение текущего направления округления
int fesetround(int direction); Устанавливает значение текущего направления округления с помощью параметра direction. При успешном выполнении возвращается нуль
void fegetenv(fenv_t *envptr); Объект, адресуемый параметром envptr, принимает конфигурацию среды вычислений с плавающей точкой
int feholdexcept(fenv_t *envptr); Вызывает безостановочную обработку исключения, возникшего при выполнении вычислений с плавающей точкой. Сохраняет конфигурацию среды вычислений с плавающей точкой в переменной, адресуемой параметром envptr, и очищает флаги состояния. При успешном выполнении возвращает нуль
void fesetenv(fenv_t *envptr); Устанавливает конфигурацию среды вычислений с плавающей точкой равной значению переменной, адресуемой параметром envptr, но не возбуждает исключения с плавающей точкой. Этот объект должен быть получен путем вызова либо функции fegetenv(), либо функции feholdexcept()
void feupdateenv(fenv t *envptr); Устанавливает конфигурацию среды вычислений с плавающей точкой равной значению переменной, адресуемой параметром envptr. Сначала сохраняет любые текущие исключения и возбуждает эти исключения после установки конфигурации среды в соответствии со значением переменной, адресуемой параметром envptr. Этот объект должен быть получен путем вызова либо функции fegetenv(), либо функции feholdexcept()

Заголовок <fenv.h> также определяет типы fenv_t и fexcept_t, которые представляют конфигурацию среды вычислений с плавающей точкой и флаги состояния исключений среды вычислений с плавающей точкой соответственно, Макрос FE_DFL_ENV задает указатель на действующую по умолчанию конфигурацию среды вычислений с плавающей точкой, определяемую в начале выполнения программы.

Определены также следующие макросы исключений, возникающих при работе с числами с плавающей точкой.

FE_DIVBYZERO  FE_INEXACT FE_INVALID
FE_OVERFLOW FE_UNDERFLOW  FE_ALL_EXCEPT

Все комбинации этих макросов, полученные с помощью оператора ИЛИ, можно сохранять в объекте типа int.

Определены и следующие макросы направления округления.

FE_DOWNWARD  FE_TONEAREST  FE_TOWARDZERO  FE_UPWARD

Эти макросы определяют метод, используемый для округления значений.

Для тестирования флагов среды вычислений с плавающей точкой необходимо установить специальную директиву для компилятора FENV_ACCESS. Разрешен ли доступ к этим флагам по умолчанию, зависит от конкретной реализации компилятора.