Namespaces
Variants
Views
Actions

Difference between revisions of "cpp/numeric/fenv/feround"

From cppreference.com
< cpp‎ | numeric‎ | fenv
(Example: use {{example template}})
m (fmt)
 
(13 intermediate revisions by 4 users not shown)
Line 1: Line 1:
 
{{cpp/title|fegetround|fesetround}}
 
{{cpp/title|fegetround|fesetround}}
 
{{cpp/numeric/fenv/navbar}}
 
{{cpp/numeric/fenv/navbar}}
{{ddcl list begin}}
+
{{dcl begin}}
{{ddcl list header | cfenv}}
+
{{dcl header|cfenv}}
{{ddcl list item | notes={{mark since c++11}} | num=1|
+
{{dcl|since=c++11|num=1|
 
int fesetround( int round )
 
int fesetround( int round )
 
}}
 
}}
{{ddcl list item | notes={{mark since c++11}} | num=2|
+
{{dcl|since=c++11|num=2|
 
int fegetround()
 
int fegetround()
 
}}
 
}}
{{ddcl list end}}
+
{{dcl end}}
  
1) Attempts to establish the floating-point rounding direction equal to the argument argument {{tt|round}}, which is expected to be one of the [[cpp/numeric/fenv/FE_round|floating point rounding macros]].  
+
Manages the floating-point rounding direction.  
  
2) Returns the value of the [[cpp/numeric/fenv/FE_round|floating point rounding macro]] that corresponds to the current rounding direction.  
+
@1@ Attempts to establish the floating-point rounding direction equal to the argument {{tt|round}}, which is expected to be one of the [[cpp/numeric/fenv/FE_round|floating point rounding macros]].
 +
 
 +
@2@ Returns the value of the [[cpp/numeric/fenv/FE_round|floating point rounding macro]] that corresponds to the current rounding direction.  
  
 
===Parameters===
 
===Parameters===
{{param list begin}}
+
{{par begin}}
{{param list item | round | rounding direction, one of [[cpp/numeric/fenv/FE_round|floating point rounding macros]]}}
+
{{par|round|rounding direction, one of [[cpp/numeric/fenv/FE_round|floating point rounding macros]]}}
{{param list end}}
+
{{par end}}
  
 
===Return value===
 
===Return value===
 
1) {{c|0}} on success, non-zero otherwise.
 
1) {{c|0}} on success, non-zero otherwise.
  
2) the [[cpp/numeric/fenv/FE_round|floating point rounding macro]] describing the current rounding direction or a negative value if the direction cannot be determined
+
2) The [[cpp/numeric/fenv/FE_round|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 {{tt|fesetround}}, can also be queried with {{lc|FLT_ROUNDS}}.
 +
 
 +
See [[cpp/numeric/fenv/FE_round|floating-point rounding macros]] for the effects of rounding.
  
 
===Example===
 
===Example===
{{example template | cpp/numeric/math/example_nearbyint}}
+
{{include|cpp/numeric/math/example_nearbyint}}
  
 
===See also===
 
===See also===
{{dcl list begin}}
+
{{dsc begin}}
{{dcl list template | cpp/numeric/math/dcl list nearbyint}}
+
{{dsc inc|cpp/numeric/math/dsc nearbyint}}
{{dcl list template | cpp/numeric/math/dcl list rint}}
+
{{dsc inc|cpp/numeric/math/dsc rint}}
{{dcl list end}}
+
{{dsc see c|c/numeric/fenv/feround|fegetround|fesetround}}
 +
{{dsc end}}
 +
 
 +
{{langlinks|de|es|fr|it|ja|pt|ru|zh}}

Latest revision as of 09:36, 25 April 2023

 
 
 
Floating-point environment
Functions
fegetroundfesetround
(C++11)(C++11)
(C++11)(C++11)
Macro constants
(C++11)
 
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.

Contents

[edit] Parameters

round - rounding direction, one of floating point rounding macros

[edit] 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.

[edit] 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.

[edit] Example

#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   │

[edit] See also

(C++11)(C++11)(C++11)
nearest integer using current rounding mode
(function) [edit]
(C++11)(C++11)(C++11)(C++11)(C++11)(C++11)(C++11)(C++11)(C++11)
nearest integer using current rounding mode with
exception if the result differs
(function) [edit]
C documentation for fegetround, fesetround