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 |