std::feraiseexcept
Определён в заголовочном файле <cfenv> | ||
|---|---|---|
int feraiseexcept( int excepts ); | (начиная с C++11) |
Пытается вызвать все исключения с плавающей точкой, перечисленные в excepts (побитовое ИЛИ макросов исключений с плавающей точкой). Если одно из исключений — FE_OVERFLOW или FE_UNDERFLOW, эта функция может дополнительно вызвать FE_INEXACT. Порядок вызова исключений не определён, за исключением того, что FE_OVERFLOW и FE_UNDERFLOW всегда вызываются до FE_INEXACT.
Параметры
| excepts | - | битовая маска, перечисляющая флаги исключений для вызова |
Возвращаемое значение
0, если вызваны все перечисленные исключения, иначе ненулевое значение.
Пример
#include <cfenv>
#include <iostream>
// #pragma STDC FENV_ACCESS ON
int main()
{
std::feclearexcept(FE_ALL_EXCEPT);
const int r = std::feraiseexcept(FE_UNDERFLOW | FE_DIVBYZERO);
std::cout << "Raising divbyzero and underflow simultaneously "
<< (r ? "fails" : "succeeds") << " and results in\n";
const int e = std::fetestexcept(FE_ALL_EXCEPT);
if (e & FE_DIVBYZERO)
std::cout << "division by zero\n";
if (e & FE_INEXACT)
std::cout << "inexact\n";
if (e & FE_INVALID)
std::cout << "invalid\n";
if (e & FE_UNDERFLOW)
std::cout << "underflow\n";
if (e & FE_OVERFLOW)
std::cout << "overflow\n";
}
Вывод:
Raising divbyzero and underflow simultaneously succeeds and results in division by zero underflow
См. также
|
(C++11) | сбрасывает указанные флаги состояния с плавающей точкой (функция) |
|
(C++11) | определяет, какие из указанных флагов состояния с плавающей точкой установлены (функция) |
Документация по C для feraiseexcept |
|
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/numeric/fenv/feraiseexcept