FE_DIVBYZERO, FE_INEXACT, FE_INVALID, FE_OVERFLOW, FE_UNDERFLOW, FE_ALL_EXCEPT
|
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 | \
|
(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
|
(C++11)
(C++11)
(C++11)
|
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
|
|