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 et nearbyint.
  • 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, flooret lround .
  • 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 = 0x0200FE_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

Informations de référence sur les fonctions alphabétiques
nearbyint, nearbyintf, nearbyintl
rint, rintf, rintl
lrint, lrintf, lrintl, llrint, llrintf, llrintl