std::fegetround, std::fesetround
From cppreference.com
Defined in header <cfenv>
|
||
int fesetround( int round ) |
(1) | (since C++11) |
int fegetround() |
(2) | (since C++11) |
Manages the floating-point rounding direction.
1) Attempts to establish the floating-point rounding direction equal to the argument
round
, which is expected to be one of the floating point rounding macros. 2) Returns the value of the floating point rounding macro that corresponds to the current rounding direction.
Parameters
round | - | rounding direction, one of floating point rounding macros |
Return value
1) 0 on success, non-zero otherwise.
2) the floating point rounding macro describing the current rounding direction or a negative value if the direction cannot be determined
Notes
The current rounding mode, reflecting the effects of the most recent fesetround
, can also be queried with FLT_ROUNDS
See floating-point rounding macros for the effects of rounding.
Example
Run this code
#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
See also
(C++11) |
nearest integer using current rounding mode (function) |
(C++11)(C++11)(C++11) |
nearest integer using current rounding mode with exception if the result differs (function) |