Floating-point environment (since C++11)
El entorno de punto flotante es el conjunto de banderas de estado de punto flotante y modos de control soportados por la implementación. Es local al hilo. Cada hilo hereda el estado inicial de su entorno de punto flotante del hilo padre. Las operaciones de punto flotante modifican las banderas de estado de punto flotante para indicar resultados anormales o información auxiliar. El estado de los modos de control de punto flotante afecta los resultados de algunas operaciones de punto flotante.
El acceso y modificación del entorno de punto flotante solo tiene sentido cuando
#pragma STDC FENV_ACCESS
es compatible y está establecido en
ON
. De lo contrario, la implementación puede asumir que los modos de control de punto flotante son siempre los predeterminados y que las banderas de estado de punto flotante nunca se prueban o modifican. En la práctica, pocos compiladores actuales, como HP aCC, Oracle Studio o IBM XL, admiten el
#pragma
explícitamente, pero la mayoría de los compiladores permiten un acceso significativo al entorno de punto flotante de todos modos.
Contenidos |
Tipos
|
Definido en el encabezado
<cfenv>
|
|
|
fenv_t
(C++11)
|
el tipo que representa todo el entorno de punto flotante
(typedef) |
|
fexcept_t
(C++11)
|
el tipo que representa todas las banderas de estado de punto flotante colectivamente
(typedef) |
Funciones
|
(C++11)
|
borra las banderas de estado de punto flotante especificadas
(función) |
|
(C++11)
|
determina cuáles de las banderas de estado de punto flotante especificadas están activadas
(función) |
|
(C++11)
|
genera las excepciones de punto flotante especificadas
(función) |
|
(C++11)
(C++11)
|
copia el estado de las banderas de estado de punto flotante especificadas desde o hacia el entorno de punto flotante
(función) |
|
(C++11)
(C++11)
|
obtiene o establece la dirección de redondeo
(función) |
|
(C++11)
|
guarda o restaura el entorno actual de punto flotante
(función) |
|
(C++11)
|
guarda el entorno, borra todas las banderas de estado e ignora todos los errores futuros
(función) |
|
(C++11)
|
restaura el entorno de punto flotante y genera las excepciones previamente activadas
(función) |
Macros
|
excepciones de punto flotante
(constante macro) |
|
|
dirección de redondeo de punto flotante
(constante macro) |
|
|
(C++11)
|
entorno de punto flotante predeterminado
(constante macro) |
Notas
Las excepciones de punto flotante no están relacionadas con las excepciones de C++. Cuando una operación de punto flotante genera una excepción de punto flotante, el estado del entorno de punto flotante cambia, lo cual puede verificarse con std::fetestexcept , pero la ejecución de un programa C++ en la mayoría de las implementaciones continúa sin interrupción.
Existen extensiones del compilador que pueden utilizarse para generar excepciones de C++ automáticamente cada vez que se produce una excepción de punto flotante:
-
La función de GNU libc
feenableexcept()habilita la captura de excepciones de punto flotante, lo que genera la señalSIGFPE. Si se utilizó la opción del compilador-fnon-call-exceptions, el manejador para esa señal puede lanzar una excepción de C++ definida por el usuario. -
La función de MSVC
_control87()habilita la captura de excepciones de punto flotante, lo que genera una excepción de hardware, que puede convertirse a excepciones de C++ con_set_se_translator.
Véase también
|
Documentación de C
para
Entorno de punto flotante
|