std::numeric_limits<T>:: round_style
|
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
chaque fois qu'une valeur qui n'est pas l'une des valeurs exactement représentables de
T
est stockée dans un objet de ce type.
Table des matières |
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) |