fegetround
, fesetround
Obtient ou définit le mode d’arrondi à virgule flottante actuel.
Syntaxe
int fegetround(void);
int fesetround(int round_mode);
Paramètres
round_mode
Mode d’arrondi à définir, comme l’une des macros d’arrondi à virgule flottante. Si la valeur n’est pas égale à l’une des macros d’arrondi à virgule flottante, le mode arrondi n’est pas modifié.
Valeur retournée
En cas de réussite, fegetround
retourne le mode d’arrondi comme l’une des valeurs de macros d’arrondi à virgule flottante. Une valeur négative est retournée s’il est impossible de déterminer le mode d’arrondi actuel.
En cas de réussite, fesetround
retourne la valeur 0. Sinon, une valeur non nulle est retournée.
Notes
Les opérations à virgule flottante peuvent utiliser l’un des différents modes d’arrondi. Ces modes contrôlent la direction vers laquelle les résultats des opérations à virgule flottante sont arrondis au moment où les résultats sont stockés. Voici les noms et les comportements des macros d’arrondi à virgule flottante définies dans <fenv.h> :
Macro | Description |
---|---|
FE_DOWNWARD |
Arrondi à l’infini négatif. |
FE_TONEAREST |
Arrondi au plus proche. |
FE_TOWARDZERO |
Arrondi à zéro. |
FE_UPWARD |
Arrondi à l’infini positif. |
Le comportement par défaut consiste FE_TONEAREST
à arrondir les résultats intermédiaires entre les valeurs représentées vers la valeur la plus proche avec un bit égal (0) le moins significatif.
Le mode d’arrondi actuel affecte ces opérations :
- Conversions de chaînes.
- Résultats des opérateurs arithmétiques à virgule flottante en dehors des expressions constantes.
- Fonctions d’arrondi de bibliothèque, comme
rint
etnearbyint
. - Valeurs de retour des fonctions mathématiques de bibliothèque standard.
Le mode d’arrondi actuel n’affecte pas ces opérations :
- Fonctions de bibliothèque
trunc
,ceil
,floor
etlround
. - Casts et conversions implicites entre des valeurs à virgule flottante et entières, toujours arrondies à zéro.
- Résultats des opérateurs arithmétiques à virgule flottante dans des expressions constantes, toujours arrondis à la valeur la plus proche.
Pour utiliser ces fonctions, vous devez désactiver les optimisations à virgule flottante qui peuvent empêcher l’accès à l’aide de la directive #pragma fenv_access(on)
avant l’appel. Pour plus d’informations, consultez fenv_access
.
Important
Avant Windows 10 version 14393, fenv.h
définie FE_UPWARD = 0x0100
et FE_DOWNWARD = 0x0200
. Dans Windows version 14393, cet en-tête a été mis à jour pour résoudre un bogue dans lequel certaines API interpréteraient FE_UPWARD
comme FE_DOWNWARD
, et vice versa. À compter de Windows version 14393 et FE_UPWARD = 0x0200
FE_DOWNWARD = 0x0100
, en inversant leurs valeurs précédentes.
Si vous avez compilé votre application sur une ancienne version du Kit de développement logiciel (SDK) Windows (ce problème dépend de la version du Kit de développement logiciel (SDK), et non de la version du système d’exploitation ou de la version VS, vous pouvez rencontrer ce problème. Mettez à jour votre application pour cibler le kit SDK Windows le plus récent afin que les définitions FE_UPWARD
et FE_DOWNWARD
soient cohérentes avec l’implémentation de Windows. Si vous ne pouvez pas mettre à jour votre application pour cibler un sdk Windows ultérieur, vous pouvez définir FE_UPWARD
comme 0x0100
et FE_DOWNWARD
comme 0x0200
dans votre code.
Spécifications
Fonction | En-tête C | En-tête C++ |
---|---|---|
fegetround , fesetround |
<fenv.h> |
<cfenv> |
Pour plus d'informations, voir Compatibilité.
Voir aussi
Référence de fonction alphabétique
nearbyint
, , nearbyintf
nearbyintl
rint
, , rintf
rintl
lrint
, , lrintf
, llrint
lrintl
, , llrintf
llrintl