FE_DOWNWARD, FE_TONEAREST, FE_TOWARDZERO, FE_UPWARD
From cppreference.com
Defined in header <cfenv>
|
||
#define FE_DOWNWARD /*implementation defined*/ |
(since C++11) | |
#define FE_TONEAREST /*implementation defined*/ |
(since C++11) | |
#define FE_TOWARDZERO /*implementation defined*/ |
(since C++11) | |
#define FE_UPWARD /*implementation defined*/ |
(since C++11) | |
Each of these macro constants expands to a nonnegative integer constant expression, which can me used with std::fesetround and std::fegetround to indicate one of the supported floating-point rounding modes. The implementation may define additional rounding mode constants in <cfenv>, which should all begin with FE_ followed by at least one uppercase letter. Each macro is only defined if it is supported.
On most implementations, these macro constants expand to the values equal to the values of FLT_ROUNDS and std::float_round_style
Constant | Explanation |
FE_DOWNWARD | rounding towards negative infinity |
FE_TONEAREST | rounding towards nearest integer |
FE_TOWARDZERO | rounding towards zero |
FE_UPWARD | rounding towards positive infinity |
Additional rounding modes may be supported by an implementation.
[edit] Example
#include <cmath> #include <cfenv> #include <iostream> int main() { #pragma STDC FENV_ACCESS ON std::fesetround(FE_DOWNWARD); std::cout << "rounding using FE_DOWNWARD: \n" << std::fixed << " 12.0 -> " << std::nearbyint(12.0) << '\n' << " 12.1 -> " << std::nearbyint(12.1) << '\n' << "-12.1 -> " << std::nearbyint(-12.1) << '\n' << " 12.5 -> " << std::nearbyint(12.5) << '\n' << " 12.9 -> " << std::nearbyint(12.9) << '\n' << "-12.9 -> " << std::nearbyint(-12.9) << '\n' << " 13.0 -> " << std::nearbyint(13.0) << '\n'; std::fesetround(FE_TONEAREST); std::cout << "rounding using FE_TONEAREST: \n" << " 12.0 -> " << std::nearbyint(12.0) << '\n' << " 12.1 -> " << std::nearbyint(12.1) << '\n' << "-12.1 -> " << std::nearbyint(-12.1) << '\n' << " 12.5 -> " << std::nearbyint(12.5) << '\n' << " 12.9 -> " << std::nearbyint(12.9) << '\n' << "-12.9 -> " << std::nearbyint(-12.9) << '\n' << " 13.0 -> " << std::nearbyint(13.0) << '\n'; }
Output:
rounding using FE_DOWNWARD: 12.0 -> 12.000000 12.1 -> 12.000000 -12.1 -> -13.000000 12.5 -> 12.000000 12.9 -> 12.000000 -12.9 -> -13.000000 13.0 -> 13.000000 rounding using FE_TONEAREST: 12.0 -> 12.000000 12.1 -> 12.000000 -12.1 -> -12.000000 12.5 -> 12.000000 12.9 -> 13.000000 -12.9 -> -13.000000 13.0 -> 13.000000
[edit] See also
indicates floating-point rounding modes (enum) | |
(C++11) (C++11) |
gets or sets rounding direction (function) |