Namespaces
Variants

std::numeric_limits<T>::round_style

Depuis fr.cppreference.net
 
 
Bibliothèque d'utilitaires
Support du langage
Support des types (types de base, RTTI)
Macros de test de fonctionnalités de la bibliothèque (C++20)
Utilitaires de programme
Fonctions variadiques
Support des coroutines (C++20)
Support des contrats (C++26)
Comparaison à trois voies
(C++20)
(C++20)(C++20)(C++20)    
(C++20)(C++20)(C++20)

Utilitaires généraux
Opérateurs relationnels (obsolète en C++20)
 
 
 
static const std::float_round_style round_style;
(jusqu'à C++11)
static constexpr std::float_round_style round_style;
(depuis C++11)

La valeur de std::numeric_limits<T>::round_style identifie le style d'arrondi utilisé par le type à virgule flottante T lorsqu'une valeur qui n'est pas l'une des valeurs exactement représentables de T est stockée dans un objet de ce type.

Spécialisations standards

T valeur de std:: numeric_limits < T > :: round_style
/* non-spécialisé */ std::round_toward_zero
bool std::round_toward_zero
char std::round_toward_zero
signed char std::round_toward_zero
unsigned char std::round_toward_zero
wchar_t std::round_toward_zero
char8_t (depuis C++20) std::round_toward_zero
char16_t (depuis C++11) std::round_toward_zero
char32_t (depuis C++11) std::round_toward_zero
short std::round_toward_zero
unsigned short std::round_toward_zero
int std::round_toward_zero
unsigned int std::round_toward_zero
long std::round_toward_zero
unsigned long std::round_toward_zero
long long (depuis C++11) std::round_toward_zero
unsigned long long (depuis C++11) std::round_toward_zero
float généralement std::round_to_nearest
double généralement std::round_to_nearest
long double généralement std::round_to_nearest

Notes

Ces valeurs sont des constantes et ne reflètent pas les modifications d'arrondi effectuées par std::fesetround . Les valeurs modifiées peuvent être obtenues à partir de FLT_ROUNDS ou std::fegetround .

Exemple

La valeur décimale 0.1 ne peut pas être représentée par un type à virgule flottante binaire. Lorsqu'elle est stockée dans un double IEEE-754, elle se situe entre 0x1.9999999999999*2 -4
et 0x1.999999999999a*2 -4
. L'arrondi à la valeur représentable la plus proche donne 0x1.999999999999a*2 -4
.

De même, la valeur décimale 0.3 , qui se situe entre 0x1.3333333333333*2 -2
et 0x1.3333333333334*2 -2
est arrondie au plus près et est stockée comme 0x1.3333333333333*2 -2
.

#include <iostream>
#include <limits>
auto print(std::float_round_style frs)
{
    switch (frs)
    {
        case std::round_indeterminate:
            return "Le style d'arrondi ne peut pas être déterminé";
        case std::round_toward_zero:
            return "Arrondi vers zéro";
        case std::round_to_nearest:
            return "Arrondi vers la valeur représentable la plus proche";
        case std::round_toward_infinity:
            return "Arrondi vers l'infini positif";
        case std::round_toward_neg_infinity:
            return "Arrondi vers l'infini négatif";
    }
    return "style d'arrondi inconnu";
}
int main()
{
    std::cout << std::hexfloat
              << "Le décimal 0.1 est stocké dans un double comme "
              << 0.1 << '\n'
              << "Le décimal 0.3 est stocké dans un double comme "
              << 0.3 << '\n'
              << print(std::numeric_limits<double>::round_style) << '\n';
}

Sortie :

Le décimal 0.1 est stocké dans un double comme 0x1.999999999999ap-4
Le décimal 0.3 est stocké dans un double comme 0x1.3333333333333p-2
Arrondi vers la valeur représentable la plus proche

Voir aussi

indique les modes d'arrondi en virgule flottante
(enum)