Функция fesetexceptflag () в C ++ устанавливает указанные флаги исключения с плавающей запятой из объекта-указателя в среду с плавающей запятой.
Функция fesetexceptflag () определена в заголовочном файле.
прототип fesetexceptflag ()
int fesetexceptflag (const fexcept_t * flagp, int исключения);
Функция fesetexceptflag () пытается скопировать все содержимое флагов исключений с плавающей запятой, указанных в excepts from flagp, в среду с плавающей запятой.
Эта функция только изменяет флаги и не вызывает никаких исключений.
fesetexceptflag () Параметры
- flagp: указатель на объект fexcept_t, из которого будут считываться флаги.
- исключения: список битовых масок для устанавливаемых флагов исключений.
Макрос | Тип | Описание |
---|---|---|
FE_DIVBYZERO | Погрешность полюса | Деление на ноль |
FE_INEXACT | Неточный | Неточные результаты, такие как (1.0 / 3.0) |
FE_INVALID | Ошибка домена | По крайней мере, один используемый аргумент - это значение, для которого функция не определена. |
FE_OVERFLOW | Ошибка диапазона переполнения | Результат слишком велик по величине, чтобы его можно было представить возвращаемым типом |
FE_UNDERFLOW | Ошибка диапазона недостаточного переполнения | Результат слишком мал по величине, чтобы его можно было представить возвращаемым типом |
FE_ALL_EXCEPT | Все исключения | Все исключения поддерживаются реализацией |
fesetexceptflag () Возвращаемое значение
- Функция fesetexceptflag () возвращает ноль в случае успеха, в противном случае - ненулевое значение.
Пример: как работает функция fesetexceptflag ()?
#include #include #pragma STDC FENV_ACCESS ON using namespace std; void print_exceptions() ( cout << "Raised exceptions: "; if(fetestexcept(FE_ALL_EXCEPT)) ( if(fetestexcept(FE_DIVBYZERO)) cout << "FE_DIVBYZERO "; if(fetestexcept(FE_INEXACT)) cout << "FE_INEXACT "; if(fetestexcept(FE_INVALID)) cout << "FE_INVALID "; if(fetestexcept(FE_OVERFLOW)) cout << "FE_OVERFLOW "; if(fetestexcept(FE_UNDERFLOW)) cout << "FE_UNDERFLOW "; ) else cout << "None"; cout << endl; ) int main() ( fexcept_t excepts; feraiseexcept(FE_DIVBYZERO); /* save current state*/ fegetexceptflag(&excepts,FE_ALL_EXCEPT); print_exceptions(); feraiseexcept(FE_INVALID|FE_OVERFLOW); print_exceptions(); /* restoring previous exceptions */ fesetexceptflag(&excepts,FE_ALL_EXCEPT); print_exceptions(); return 0; )
Когда вы запустите программу, вывод будет:
Повышенные исключения: FE_DIVBYZERO Повышенные исключения: FE_DIVBYZERO FE_INVALID FE_OVERFLOW Повышенные исключения: FE_DIVBYZERO