fegetround, fesetround
From cppreference.com
C
Concurrency support (C11)
Floating-point environment
Functions
(C99)
(C99)
(C99)
(C99)(C99)
fegetroundfesetround
(C99)(C99)
(C99)
(C99)
(C99)
Macro constants
(C99)
Defined in header
<fenv.h>
int fesetround( int round );
(1)
(since C99)
int fegetround();
(2)
(since C99)
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.
[edit] Parameters
round
-
rounding direction, one of floating-point rounding macros
[edit] 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.
[edit] Notes
The current rounding mode, reflecting the effects of the most recent fesetround
, can also be queried with FLT_ROUNDS .
[edit] Example
Run this code
#include <fenv.h> #include <math.h> #include <stdio.h> // #pragma STDC FENV_ACCESS ON void show_fe_current_rounding_direction(void) { printf ("current rounding direction: "); switch (fegetround()) { case FE_TONEAREST : printf ("FE_TONEAREST"); break; case FE_DOWNWARD : printf ("FE_DOWNWARD"); break; case FE_UPWARD : printf ("FE_UPWARD"); break; case FE_TOWARDZERO : printf ("FE_TOWARDZERO"); break; default: printf ("unknown"); }; printf ("\n"); } int main(void) { /* Default rounding direction */ show_fe_current_rounding_direction(); printf ("+11.5 -> %+4.1f\n", rint (+11.5)); /* midway between two integers */ printf ("+12.5 -> %+4.1f\n", rint (+12.5)); /* midway between two integers */ /* Save current rounding direction. */ int curr_direction = fegetround(); /* Temporarily change current rounding direction. */ fesetround(FE_DOWNWARD ); show_fe_current_rounding_direction(); printf ("+11.5 -> %+4.1f\n", rint (+11.5)); printf ("+12.5 -> %+4.1f\n", rint (+12.5)); /* Restore default rounding direction. */ fesetround(curr_direction); show_fe_current_rounding_direction(); return 0; }
Possible output:
current rounding direction: FE_TONEAREST +11.5 -> +12.0 +12.5 -> +12.0 current rounding direction: FE_DOWNWARD +11.5 -> +11.0 +12.5 -> +12.0 current rounding direction: FE_TONEAREST
[edit] References
- C23 standard (ISO/IEC 9899:2024):
- 7.6.3.1 The fegetround function (p: TBD)
- 7.6.3.2 The fesetround function (p: TBD)
- C17 standard (ISO/IEC 9899:2018):
- 7.6.3.1 The fegetround function (p: TBD)
- 7.6.3.2 The fesetround function (p: TBD)
- C11 standard (ISO/IEC 9899:2011):
- 7.6.3.1 The fegetround function (p: 212)
- 7.6.3.2 The fesetround function (p: 212-213)
- C99 standard (ISO/IEC 9899:1999):
- 7.6.3.1 The fegetround function (p: 193)
- 7.6.3.2 The fesetround function (p: 193-194)
[edit] See also
(C99)(C99)(C99)(C99)(C99)(C99)(C99)(C99)(C99)
exception if the result differs
(function) [edit]
C++ documentation for fegetround, fesetround