Spec-Zone.ru › C++

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

См. также

feclearexcept
(C++11)
очищает указанные флаги состояния с плавающей запятой
(функция)
fetestexcept
(C++11)
определяет, какие из указанных флагов состояния с плавающей запятой установлены
(функция)
Документация на C для feraiseexcept

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/numeric/fenv/feraiseexcept

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API