fegetround, fesetround - cppreference.com (original) (raw)
| Defined in header <fenv.h> | ||
|---|---|---|
| int fesetround( int round ); | (1) | (since C99) |
| int fegetround(); | (2) | (since C99) |
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.
Returns the value of the floating-point rounding macro that corresponds to the current rounding direction.
[edit] Parameters
[edit] Return value
0 on success, non-zero otherwise.
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
#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)