#include <fenv.h> void feclearexcept(int excepts);
void fegetexceptflag(fexcept_t *flagp, int excepts);
void feraiseexcept(int excepts);
void fesetexceptflag(const fexcept_t *flagp, int excepts);
int fetestexcept(int excepts); int fegetround(void);
int fesetround(int rounding_mode); void fegetenv(fenv_t *envp);
int feholdexcept(fenv_t *envp);
void fesetenv(const fenv_t *envp);
void feupdateenv(const fenv_t *envp);
исключение переаолнения (Overflow) происходит когда результат представлен числом с плавающей точкой и имеет большее абсолютное значение чем может быть указано.
Исключение Underflow происходит когда результат представлен числом с плавающей точкой и имеет меньшее абсолютное значение чем может быть указано (а в денормализованном виде не будет точным значением).
Исключение Inexact происходит когда округленный результат операции теряет свою точность. Это может произойти и при исключениях Overflow или Underflow.
Исключение Invalid когда нет определенного результата операции, например при операциях 0/0 или бесконечность - бесконечность или sqrt(-1).
Hижеприведенные макросы: FE_DIVBYZERO, FE_INEXACT, FE_INVALID, FE_OVERFLOW, FE_UNDERFLOW - определены, если данная реализация поддерживает обработку соответствующих ошибок. Соответствующие биты должны быть определены таким образом, чтобы можно было вызвать функции обработки ошибок с целочисленным аргументом, например, FE_OVERFLOW|FE_UNDERFLOW. Могут поддерживаться и другие ошибки. Макрос FE_ALL_EXCEPT является результатом побитового логического сложения всех битов, соответствующих поддерживаемым ошибкам.
Функция feclearexcept сбрасывает поддерживаемые ошибки, заданные битами в аргументе функции.
Функция fegetexceptflag заносит представление флагов ошибок, указанных в аргументе excepts, в объект *flagp.
Функция feraiseexcept устанавливает поддерживаемые ошибки, заданные битами в excepts.
Функция fesetexceptflag устанавливает значение полного состояния ошибок, указанных в excepts, равным значению *flagp. Это значение должно быть получено ранее с помощью вызова fegetexceptflag, последний аргумент которого содержит в excepts все биты.
Функция fetestexcept возвращает слово, в котором установлены биты, указанные в аргументе excepts и для которых в данный момент установлена соответствующая ошибка.
Функция fegetround возвращает макрос, соответствующий текущему режиму округления.
Функция fesetround устанавливает режим округления в соответствии с аргументом и возвращает ноль, если эта операция была успешно выполнена.
Функция fegetenv сохраняет текущее окружение операций с плавающей точкой в объекте *envp.
Функция feholdexcept делает то же самое, а затем сбрасывает все флаги ошибок и устанавливает безостановочный (продолжающий работу при возникновении ошибок) режим, если таковой разрешен. При удачном завершении функция возвращает нулевое значение.
Функция fesetenv восстанавливает окружение операций с плавающей точкой из объекта *envp. Этот объект должен быть заведомо правильным: например, быть результатом вызова fegetenv, feholdexcept или быть эквивалентен FE_DFL_ENV. Вызов этой функции не вызывает ошибок.
Функция
feupdateenv
устанавливает окружение для операций с плавающей точкой представленное
объектом
*envp,
за исключением необработанных результатов (Исключения см.выше).
После выова этой функции все исключения , будут побитно сложены
с установленными ранее и находящимися в
*envp.
Объект
*envp
должен быть корректным.
int feenableexcept (int excepts);
int fedisableexcept (int excepts);
int fegetexcept (void); #define _GNU_SOURCE
#include <fenv.h>
Функции feenableexcept и fedisableexcept включают (выключают) ловушки для каждого исключения excepts и возвращают предыдущий набор исключений и -1 при ошибке. Функция fegetexcept возвращает набор всех включенных исключений.
Закладки на сайте Проследить за страницей |
Created 1996-2024 by Maxim Chirkov Добавить, Поддержать, Вебмастеру |