std:: fegetround, std:: fesetround
|
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.
round
, qui est censé être l'une des
macros d'arrondi à virgule flottante
.
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
|
|