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)
Défini dans l'en-tête <cfenv>
int fesetround ( int round )
(1) (depuis C++11)
int fegetround ( )
(2) (depuis C++11)

Gère la direction d'arrondi des nombres à virgule flottante.

1) Tente d'établir la direction d'arrondi des nombres à virgule flottante égale à l'argument round , qui est censé être l'une des macros d'arrondi à virgule flottante .
2) Retourne la valeur de la macro d'arrondi en virgule flottante qui correspond à la direction d'arrondi actuelle.

Table des matières

Paramètres

round - direction d'arrondi, l'une des macros d'arrondi en virgule flottante

Valeur de retour

1) 0 en cas de succès, valeur non nulle sinon.

2) La macro d'arrondi en virgule flottante décrivant la direction d'arrondi actuelle ou une valeur négative si la direction ne peut pas être déterminée.

Notes

Le mode d'arrondi actuel, reflétant les effets du plus récent fesetround , peut également être consulté avec FLT_ROUNDS .

Voir les macros d'arrondi en virgule flottante pour les effets de l'arrondi.

Exemple

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

Sortie :

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

Voir aussi

(C++11) (C++11) (C++11)
entier le plus proche en utilisant le mode d'arrondi actuel
(fonction)
(C++11) (C++11) (C++11) (C++11) (C++11) (C++11) (C++11) (C++11) (C++11)
entier le plus proche en utilisant le mode d'arrondi actuel avec
exception si le résultat diffère
(fonction)
Documentation C pour fegetround , fesetround