Floating-point environment (since C++11)
| Common mathematical functions | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Mathematical special functions (C++17) | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Mathematical constants (C++20) | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Basic linear algebra algorithms (C++26) | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Data-parallel types (SIMD) (C++26) | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Floating-point environment (C++11) | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Complex numbers | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Numeric array (valarray) | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Pseudo-random number generation | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Bit manipulation (C++20) | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Saturation arithmetic (C++26) | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Factor operations | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Interpolations | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Generic numeric operations | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| C-style checked integer arithmetic | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Functions | ||||
(C++11) | ||||
(C++11) | ||||
(C++11) | ||||
(C++11)(C++11) | ||||
(C++11)(C++11) | ||||
(C++11)(C++11) | ||||
(C++11) | ||||
(C++11) | ||||
| Macro constants | ||||
(C++11)(C++11)(C++11)(C++11)(C++11)(C++11) | ||||
(C++11)(C++11)(C++11)(C++11) | ||||
(C++11) |
The floating-point environment is the set of floating-point status flags and control modes supported by the implementation. It is thread-local. Each thread inherits the initial state of its floating-point environment from the parent thread. Floating-point operations modify the floating-point status flags to indicate abnormal results or auxiliary information. The state of floating-point control modes affects the outcomes of some floating-point operations.
The floating-point environment access and modification is only meaningful when
#pragma STDC FENV_ACCESS is supported and is set to ON. Otherwise the implementation is free to assume that floating-point control modes are always the default ones and that floating-point status flags are never tested or modified. In practice, few current compilers, such as HP aCC, Oracle Studio, or IBM XL, support the #pragma explicitly, but most compilers allow meaningful access to the floating-point environment anyway.
Contents |
[edit] Types
| Defined in header
<cfenv> | |
| fenv_t (C++11) |
the type representing the entire floating-point environment (typedef) [edit] |
| fexcept_t (C++11) |
the type representing all floating-point status flags collectively (typedef) [edit] |
[edit] Functions
| (C++11) |
clears the specified floating-point status flags (function) [edit] |
| (C++11) |
determines which of the specified floating-point status flags are set (function) [edit] |
| (C++11) |
raises the specified floating-point exceptions (function) [edit] |
| (C++11)(C++11) |
copies the state of the specified floating-point status flags from or to the floating-point environment (function) [edit] |
| (C++11)(C++11) |
gets or sets rounding direction (function) [edit] |
| (C++11) |
saves or restores the current floating-point environment (function) [edit] |
| (C++11) |
saves the environment, clears all status flags and ignores all future errors (function) [edit] |
| (C++11) |
restores the floating-point environment and raises the previously raised exceptions (function) [edit] |
[edit] Macros
| floating-point exceptions (macro constant) [edit] | |
| floating-point rounding direction (macro constant) [edit] | |
| (C++11) |
default floating-point environment (macro constant) [edit] |
[edit] Notes
The floating-point exceptions are not related to the C++ exceptions. When a floating-point operation raises a floating-point exception, the status of the floating-point environment changes, which can be tested with std::fetestexcept, but the execution of a C++ program on most implementations continues uninterrupted.
There are compiler extensions that may be used to generate C++ exceptions automatically whenever a floating-point exception is raised:
- GNU libc function
feenableexcept()enables trapping of the floating-point exceptions, which generates the signalSIGFPE. If the compiler option-fnon-call-exceptionswas used, the handler for that signal may throw a user-defined C++ exception. - MSVC function
_set_se_translator.
[edit] See also
| C documentation for Floating-point environment
|