C++ fegetround()

The fegetround() function in C++ is used to obtain the value of the floating point rounding macro that corresponds to the current rounding direction.

The fegetround() function is defined in <cfenv> header file.

fegetround() prototype

int fegetround();

fegetround() Parameters

  • None

fegetround() Return value

  • On success, the fegetround() function returns the floating point rounding macro describing the current rounding direction.
  • On failure it returns a negative value.
Rounding macro values
Macro Description
FE_DOWNWARD Round downward
FE_TONEAREST Round to nearest value
FE_TOWARDZERO Round towards zero
FE_UPWARD Round upward

Example: How fegetround() function works?

#include <iostream>
#include <cmath>
#include <cfenv>
#pragma STDC FENV_ACCESS ON
using namespace std;

void print_current_rounding_direction()
{
	cout << "Current rounding method: ";
	switch (fegetround()) {
		case FE_TONEAREST:
			cout << "FE_TONEAREST";
			break;
		case FE_DOWNWARD:
			cout << "FE_DOWNWARD";
			break;
		case FE_UPWARD:
			cout << "FE_UPWARD";
			break;
		case FE_TOWARDZERO:
			cout << "FE_TOWARDZERO";
			break;
		default:
			cout << "unknown";
	};
	cout << endl;
}

int main(void)
{
	print_current_rounding_direction();
	cout << "6.2 -> " << rint(6.2) << endl;
	cout << "18.7 -> " << rint(18.7) << endl;

	fesetround(FE_UPWARD);
	print_current_rounding_direction();
	cout << "6.2 -> " << rint(6.2) << endl;
	cout << "19.7 -> " << rint(19.7) << endl;
	
	fesetround(FE_DOWNWARD);
	print_current_rounding_direction();
	cout << "6.2 -> " << rint(6.2) << endl;
	cout << "19.7 -> " << rint(19.7) << endl;

	return 0;
}

When you run the program, the output will be:

Current rounding method: FE_TONEAREST
6.2 -> 6
18.7 -> 19
Current rounding method: FE_UPWARD
6.2 -> 7
19.7 -> 20
Current rounding method: FE_DOWNWARD
6.2 -> 6
19.7 -> 19