Namespaces
Variants

FE_DIVBYZERO, FE_INEXACT, FE_INVALID, FE_OVERFLOW, FE_UNDERFLOW, FE_ALL_EXCEPT

From cppreference.net
Floating-point environment
Functions
(C++11) (C++11)
(C++11) (C++11)
Macro constants
FE_ALL_EXCEPT FE_DIVBYZERO FE_INEXACT FE_INVALID FE_OVERFLOW FE_UNDERFLOW
(C++11) (C++11) (C++11) (C++11) (C++11) (C++11)
(C++11)
Definido en el encabezado <cfenv>
#define FE_DIVBYZERO    /*implementation defined power of 2*/
(desde C++11)
#define FE_INEXACT      /*implementation defined power of 2*/
(desde C++11)
#define FE_INVALID      /*implementation defined power of 2*/
(desde C++11)
#define FE_OVERFLOW     /*implementation defined power of 2*/
(desde C++11)
#define FE_UNDERFLOW    /*implementation defined power of 2*/
(desde C++11)
#define FE_ALL_EXCEPT   FE_DIVBYZERO | FE_INEXACT | \

FE_INVALID | FE_OVERFLOW |  \

FE_UNDERFLOW
(desde C++11)

Todas estas constantes de macro (excepto FE_ALL_EXCEPT ) se expanden a expresiones constantes enteras que son distintas potencias de 2, las cuales identifican de forma única todas las excepciones de punto flotante soportadas. Cada macro se define solo si está soportada.

La macro constante FE_ALL_EXCEPT , que se expande al OR bit a bit de todas las demás FE_* , siempre está definida y es cero si las excepciones de punto flotante no son compatibles con la implementación.

Constante Explicación
FE_DIVBYZERO error de polo ocurrido en una operación de punto flotante anterior
FE_INEXACT resultado inexacto: fue necesario redondear para almacenar el resultado de una operación de punto flotante anterior
FE_INVALID error de dominio ocurrido en una operación de punto flotante anterior
FE_OVERFLOW el resultado de la operación de punto flotante anterior era demasiado grande para ser representable
FE_UNDERFLOW el resultado de la operación de punto flotante anterior era subnormal con una pérdida de precisión
FE_ALL_EXCEPT OR bit a bit de todas las excepciones de punto flotante soportadas

La implementación puede definir constantes de macro adicionales en <cfenv> para identificar excepciones de punto flotante adicionales. Todas estas constantes comienzan con FE_ seguidas de al menos una letra mayúscula.

Consulte math_errhandling para más detalles.

Ejemplo

#include <cfenv>
#include <cmath>
#include <iostream>
// #pragma STDC FENV_ACCESS ON
volatile double zero = 0.0; // volatile not needed where FENV_ACCESS is supported
volatile double one = 1.0;  // volatile not needed where FENV_ACCESS is supported
int main()
{
    std::feclearexcept(FE_ALL_EXCEPT);
    std::cout <<  "1.0/0.0 = " << 1.0 / zero << '\n';
    if (std::fetestexcept(FE_DIVBYZERO))
        std::cout << "division by zero reported\n";
    else
        std::cout << "division by zero not reported\n";
    std::feclearexcept(FE_ALL_EXCEPT);
    std::cout << "1.0/10 = " << one / 10 << '\n';
    if (std::fetestexcept(FE_INEXACT))
        std::cout << "inexact result reported\n";
    else
        std::cout << "inexact result not reported\n";
    std::feclearexcept(FE_ALL_EXCEPT);
    std::cout << "sqrt(-1) = " << std::sqrt(-1) << '\n';
    if (std::fetestexcept(FE_INVALID))
        std::cout << "invalid result reported\n";
    else
        std::cout << "invalid result not reported\n";
}

Salida posible:

1.0/0.0 = inf
division by zero reported
1.0/10 = 0.1
inexact result reported
sqrt(-1) = -nan
invalid result reported

Véase también

define el mecanismo de manejo de errores utilizado por las funciones matemáticas comunes
(macro constante)
Documentación C para macros de excepción de punto flotante