Scroll to navigation

std::fegetround,std::fesetround(3) C++ Standard Libary std::fegetround,std::fesetround(3)

NAME

std::fegetround,std::fesetround - std::fegetround,std::fesetround

Synopsis


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 <cfenv>
#include <cmath>
#include <iomanip>
#include <iostream>
#include <utility>
// #pragma STDC FENV_ACCESS ON


int main()
{
static constexpr std::pair<const char*, const double> samples[]
{
{" 12.0", 12.0}, {" 12.1", 12.1}, {"-12.1", -12.1}, {" 12.5", 12.5},
{"-12.5", -12.5}, {" 12.9", 12.9}, {"-12.9", -12.9}, {" 13.0", 13.0}
};


std::cout <<
"│ sample │ FE_DOWNWARD │ FE_UPWARD │ FE_TONEAREST │ FE_TOWARDZERO │\n";


for (const auto& [str, fp] : samples)
{
std::cout << "│ " << std::setw(6) << str << " │ ";
for (const int dir : {FE_DOWNWARD, FE_UPWARD, FE_TONEAREST, FE_TOWARDZERO})
{
std::fesetround(dir);
std::cout << std::setw(10) << std::fixed << std::nearbyint(fp) << " │ ";
}
std::cout << '\n';
}
}

Output:


│ sample │ FE_DOWNWARD │ FE_UPWARD │ FE_TONEAREST │ FE_TOWARDZERO │
│ 12.0 │ 12.000000 │ 12.000000 │ 12.000000 │ 12.000000 │
│ 12.1 │ 12.000000 │ 13.000000 │ 12.000000 │ 12.000000 │
│ -12.1 │ -13.000000 │ -12.000000 │ -12.000000 │ -12.000000 │
│ 12.5 │ 12.000000 │ 13.000000 │ 12.000000 │ 12.000000 │
│ -12.5 │ -13.000000 │ -12.000000 │ -12.000000 │ -12.000000 │
│ 12.9 │ 12.000000 │ 13.000000 │ 13.000000 │ 12.000000 │
│ -12.9 │ -13.000000 │ -12.000000 │ -13.000000 │ -12.000000 │
│ 13.0 │ 13.000000 │ 13.000000 │ 13.000000 │ 13.000000 │

See also


nearbyint
nearbyintf
nearbyintl nearest integer using current rounding mode
(C++11) (function)
(C++11)
(C++11)
rint
rintf
rintl
lrint
lrintf
lrintl
llrint
llrintf nearest integer using current rounding mode with
llrintl exception if the result differs
(C++11) (function)
(C++11)
(C++11)
(C++11)
(C++11)
(C++11)
(C++11)
(C++11)
(C++11)
C documentation for
fegetround,
fesetround

2024.06.10 http://cppreference.com