##### cppreference.com

##### Search

Create account

##### Namespaces

- Page
- Discussion

##### Variants

##### Views

- View
- Edit
- History

##### Actions

# FE_DOWNWARD, FE_TONEAREST, FE_TOWARDZERO, FE_UPWARD

From cppreference.com
< cpp‎ | numeric‎ | fenv

Defined in header `<cfenv>` |  |
#define FE_DOWNWARD /*implementation defined*/ |  | (since C++11)
#define FE_TONEAREST /*implementation defined*/ |  | (since C++11)
#define FE_TOWARDZERO /*implementation defined*/ |  | (since C++11)
#define FE_UPWARD /*implementation defined*/ |  | (since C++11)

Each of these macro constants expands to a nonnegative integer constant expression, which can me used with std::fesetround and std::fegetround to indicate one of the supported floating-point rounding modes. The implementation may define additional rounding mode constants in `<cfenv>`, which should all begin with `FE_` followed by at least one uppercase letter. Each macro is only defined if it is supported.

On most implementations, these macro constants expand to the values equal to the values of FLT_ROUNDS and std::float_round_style

Constant | Explanation
`FE_DOWNWARD` | rounding towards negative infinity
`FE_TONEAREST` | rounding towards nearest integer
`FE_TOWARDZERO` | rounding towards zero
`FE_UPWARD` | rounding towards positive infinity

Additional rounding modes may be supported by an implementation.

### [edit] Example

[edit]
Run this code

    #include <cmath>
    #include <cfenv>
    #include <iostream>

    int main()
    {
        #pragma STDC FENV_ACCESS ON
        std::fesetround(FE_DOWNWARD);
        std::cout << "rounding using FE_DOWNWARD: \n" << std::fixed
                  << " 12.0 ->  " << std::nearbyint(12.0) << '\n'
                  << " 12.1 ->  " << std::nearbyint(12.1) << '\n'
                  << "-12.1 -> " << std::nearbyint(-12.1) << '\n'
                  << " 12.5 ->  " << std::nearbyint(12.5) << '\n'
                  << " 12.9 ->  " << std::nearbyint(12.9) << '\n'
                  << "-12.9 -> " << std::nearbyint(-12.9) << '\n'
                  << " 13.0 ->  " << std::nearbyint(13.0) << '\n';
        std::fesetround(FE_TONEAREST);
        std::cout << "rounding using FE_TONEAREST: \n"
                  << " 12.0 ->  " << std::nearbyint(12.0) << '\n'
                  << " 12.1 ->  " << std::nearbyint(12.1) << '\n'
                  << "-12.1 -> " << std::nearbyint(-12.1) << '\n'
                  << " 12.5 ->  " << std::nearbyint(12.5) << '\n'
                  << " 12.9 ->  " << std::nearbyint(12.9) << '\n'
                  << "-12.9 -> " << std::nearbyint(-12.9) << '\n'
                  << " 13.0 ->  " << std::nearbyint(13.0) << '\n';
    }

Output:

    rounding using FE_DOWNWARD:
     12.0 ->  12.000000
     12.1 ->  12.000000
    -12.1 -> -13.000000
     12.5 ->  12.000000
     12.9 ->  12.000000
    -12.9 -> -13.000000
     13.0 ->  13.000000
    rounding using FE_TONEAREST:
     12.0 ->  12.000000
     12.1 ->  12.000000
    -12.1 -> -12.000000
     12.5 ->  12.000000
     12.9 ->  13.000000
    -12.9 -> -13.000000
     13.0 ->  13.000000

### [edit] See also

float_round_style | indicates floating-point rounding modes (enum) [edit]
fegetround fesetround (C++11)(C++11) | gets or sets rounding direction (function) [edit]

Retrieved from "http://en.cppreference.com/mwiki/index.php?title=cpp/numeric/fenv/FE_round&oldid=62811"