Namespaces
Variants

std:: fegetround, std:: fesetround

From cppreference.net
Floating-point environment
Functions
fegetround fesetround
(C++11) (C++11)
(C++11) (C++11)
Macro constants
(C++11)
Definiert im Header <cfenv>
int fesetround ( int round )
(1) (seit C++11)
int fegetround ( )
(2) (seit C++11)

Verwaltet die Rundungsrichtung für Gleitkommazahlen.

1) Versucht, die Gleitkomma-Rundungsrichtung auf den Argumentwert round einzustellen, von dem erwartet wird, dass es sich um eines der Gleitkomma-Rundungsmakros handelt.
2) Gibt den Wert des Gleitkomma-Rundungsmakros zurück, das der aktuellen Rundungsrichtung entspricht.

Inhaltsverzeichnis

Parameter

round - Rundungsrichtung, eine der Gleitkomma-Rundungsmakros

Rückgabewert

1) 0 bei Erfolg, andernfalls ungleich Null.

2) Das Gleitkomma-Rundungsmakro beschreibt die aktuelle Rundungsrichtung oder einen negativen Wert, wenn die Richtung nicht bestimmt werden kann.

Hinweise

Der aktuelle Rundungsmodus, der die Auswirkungen des zuletzt durchgeführten fesetround widerspiegelt, kann auch mit FLT_ROUNDS abgefragt werden.

Siehe floating-point rounding macros für die Auswirkungen des Rundens.

Beispiel

#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';
    }
}

Ausgabe:

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

Siehe auch

(C++11) (C++11) (C++11)
nächstliegende Ganzzahl unter Verwendung des aktuellen Rundungsmodus
(Funktion)
(C++11) (C++11) (C++11) (C++11) (C++11) (C++11) (C++11) (C++11) (C++11)
nächstliegende Ganzzahl unter Verwendung des aktuellen Rundungsmodus mit
Ausnahme, wenn das Ergebnis abweicht
(Funktion)
C-Dokumentation für fegetround , fesetround