C++ rint()

The rint() function in C++ rounds the argument to an integral value using the current rounding mode.

The rint() function in C++ rounds the argument to an integral value using the current rounding mode. The current rounding mode is determined by the function fesetround().


rint() prototype [As of C++ 11 standard]

double rint(double x);
float rint(float x);
long double rint(long double x);
double rint(T x); // For integral type

The rint() function takes a single argument and returns a value of type double, float or long double type. This function is defined in <cmath> header file.


rint() Parameters

The rint() function takes a single argument value to round.


rint() Return value

The rint() function rounds the argument x to an integral value, using the rounding direction specified by fegetround() and returns the value. By default, the rounding direction is set to 'to-nearest'. The rounding direction can be set to other values using fesetround() function.


Example 1: How rint() works in C++?

#include <iostream>
#include <cmath>
#include <cfenv>
using namespace std;

int main()
{
    // by default, rounding direction is to-nearest i.e. fesetround(FE_TONEAREST)
    double x = 11.87, result;
    result = rint(x);
    cout << "Rounding to-nearest (" << x << ") = " << result << endl;
    
    // upper value is taken for mid-way values
    x = 11.5;
    result = rint(x);
    cout << "Rounding to-nearest (" << x << ") = " << result << endl;

    // setting rounding direction to DOWNWARD
    fesetround(FE_DOWNWARD);
    x = 11.87;
    result = rint(x);
    cout << "Rounding downward (" << x << ") = " << result << endl;
    
    // setting rounding direction to UPWARD
    fesetround(FE_UPWARD);
    x = 33.32;
    result = rint(x);
    cout << "Rounding upward (" << x << ") = " << result << endl;
    
    return 0;
}

When you run the program, the output will be:

Rounding to-nearest (11.87) = 12
Rounding to-nearest (11.5) = 12
Rounding downward (11.8699) = 11
Rounding upward (33.3201) = 34

Example 2: rint() function for integral types

#include <iostream>
#include <cmath>
#include <cfenv>
using namespace std;

int main()
{
    int x = 15;
    double result;
    
    // setting rounding direction to DOWNWARD
    fesetround(FE_DOWNWARD);
    result = rint(x);
    cout << "Rounding downward (" << x << ") = " << result << endl;

    return 0;
}

When you run the program, the output will be:

Rounding downward (15) = 15

For integral values, applying the rint function returns the same value as the input. So it is not commonly used for integral values in practice.

Did you find this article helpful?