| 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) | ||||
fegetroundfesetround (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) |
Defined in header <cfenv> | ||
int fesetround(int round) | (1) | (since C++11) |
int fegetround() | (2) | (since C++11) |
Manages the floating-point rounding direction.
round, which is expected to be one of thefloating point rounding macros.Contents |
| round | - | rounding direction, one offloating point rounding macros |
1)0 on success, non-zero otherwise.
2) Thefloating point rounding macro describing the current rounding direction or a negative value if the direction cannot be determined.
The current rounding mode, reflecting the effects of the most recentfesetround, can also be queried withFLT_ROUNDS.
Seefloating-point rounding macros for the effects of rounding.
#include <cfenv>#include <cmath>#include <iomanip>#include <iostream>#include <utility>// #pragma STDC FENV_ACCESS ON int main(){staticconstexprstd::pair<constchar*,constdouble> samples[]{{" 12.0",12.0},{" 12.1",12.1},{"-12.1",-12.1},{" 12.5",12.5},{"-12.5",-12.5},{" 12.9",12.9},{"-12.9",-12.9},{" 13.0",13.0}}; std::cout<<"│ sample │ FE_DOWNWARD │ FE_UPWARD │ FE_TONEAREST │ FE_TOWARDZERO │\n"; for(constauto&[str, fp]: samples){std::cout<<"│ "<<std::setw(6)<< str<<" │ ";for(constint dir:{FE_DOWNWARD,FE_UPWARD,FE_TONEAREST,FE_TOWARDZERO}){ std::fesetround(dir);std::cout<<std::setw(10)<<std::fixed<<std::nearbyint(fp)<<" │ ";}std::cout<<'\n';}}
Output:
│ sample │ FE_DOWNWARD │ FE_UPWARD │ FE_TONEAREST │ FE_TOWARDZERO ││ 12.0 │ 12.000000 │ 12.000000 │ 12.000000 │ 12.000000 ││ 12.1 │ 12.000000 │ 13.000000 │ 12.000000 │ 12.000000 ││ -12.1 │ -13.000000 │ -12.000000 │ -12.000000 │ -12.000000 ││ 12.5 │ 12.000000 │ 13.000000 │ 12.000000 │ 12.000000 ││ -12.5 │ -13.000000 │ -12.000000 │ -12.000000 │ -12.000000 ││ 12.9 │ 12.000000 │ 13.000000 │ 13.000000 │ 12.000000 ││ -12.9 │ -13.000000 │ -12.000000 │ -13.000000 │ -12.000000 ││ 13.0 │ 13.000000 │ 13.000000 │ 13.000000 │ 13.000000 │
(C++11)(C++11)(C++11) | nearest integer using current rounding mode (function)[edit] |
(C++11)(C++11)(C++11)(C++11)(C++11)(C++11)(C++11)(C++11)(C++11) | nearest integer using current rounding mode with exception if the result differs (function)[edit] |
C documentation forfegetround,fesetround | |