C ++ fesetexceptflag () - Стандартная библиотека C ++

Функция 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

Интересные статьи...