Spec-Zone.ru › C

feraiseexcept

Определено в заголовочном файле <fenv.h>
int feraiseexcept( int excepts );
(с C99)

Пытается вызвать все исключения с плавающей запятой, перечисленные в excepts (побитовое ИЛИ флагов исключений с плавающей запятой макросов исключений с плавающей запятой). Если одно из исключений — FE_OVERFLOW или FE_UNDERFLOW, эта функция может дополнительно вызвать FE_INEXACT. Порядок, в котором вызываются исключения, не определён, за исключением того, что FE_OVERFLOW и FE_UNDERFLOW всегда вызываются до FE_INEXACT.

Параметры

excepts - битовая маска, перечисляющая флаги исключений, которые нужно вызвать

Возвращаемое значение

​0​ если все перечисленные исключения были вызваны, в противном случае ненулевое значение.

Пример

#include <stdio.h>
#include <fenv.h>
 
#pragma STDC FENV_ACCESS ON
 
void show_fe_exceptions(void)
{
    printf("current exceptions raised: ");
    if(fetestexcept(FE_DIVBYZERO))     printf(" FE_DIVBYZERO");
    if(fetestexcept(FE_INEXACT))       printf(" FE_INEXACT");
    if(fetestexcept(FE_INVALID))       printf(" FE_INVALID");
    if(fetestexcept(FE_OVERFLOW))      printf(" FE_OVERFLOW");
    if(fetestexcept(FE_UNDERFLOW))     printf(" FE_UNDERFLOW");
    if(fetestexcept(FE_ALL_EXCEPT)==0) printf(" none");
    feclearexcept(FE_ALL_EXCEPT);
    printf("\n");
}
 
double some_computation(void)
{
    /* Computation reaches a state that causes overflow. */
    int r = feraiseexcept(FE_OVERFLOW | FE_INEXACT);
    printf("feraiseexcept() %s\n", (r?"fails":"succeeds"));
    return 0.0;
}
 
int main(void)
{
    some_computation();
    show_fe_exceptions();
 
    return 0;
}

Вывод:

feraiseexcept() succeeds
current exceptions raised:  FE_INEXACT FE_OVERFLOW

Ссылки

  • Стандарт C11 (ISO/IEC 9899:2011):
    • 7.6.2.3 Функция feraiseexcept (стр. 210)
  • Стандарт C99 (ISO/IEC 9899:1999):
    • 7.6.2.3 Функция feraiseexcept (стр. 191)

См. также

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

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

Spec-Zone.ru

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