Namespaces
Variants
Views
Actions

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

From cppreference.com
< cpp‎ | numeric‎ | fenv
(Example: use {{example template}})
m (typo)
Line 11: Line 11:
 
{{ddcl list end}}
 
{{ddcl list 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]].  
+
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.  
 
2) Returns the value of the [[cpp/numeric/fenv/FE_round|floating point rounding macro]] that corresponds to the current rounding direction.  

Revision as of 13:43, 1 October 2012

 
 
 
Floating-point environment
Functions
fegetroundfesetround
(C++11)(C++11)
(C++11)(C++11)
Macro constants
(C++11)
 

Template:ddcl list begin <tr class="t-dsc-header">

<td>
Defined in header <cfenv>
</td>

<td></td> <td></td> </tr> <tr class="t-dcl ">

<td >
int fesetround( int round )
</td>

<td > (1) </td> <td > (since C++11) </td> </tr> <tr class="t-dcl ">

<td >
int fegetround()
</td>

<td > (2) </td> <td > (since C++11) </td> </tr> Template:ddcl list end

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

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

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   │

See also

Template:cpp/numeric/math/dcl list nearbyintTemplate:cpp/numeric/math/dcl list rint