#include <fenv.h> // <cfenv> en C++
La direction d'arrondi dynamique permet d'influencer certains calculs en virgule flottante. En pratique, le mode
par défaut est l'arrondi au plus proche, mais <fenv.h> permet aussi de forcer un arrondi vers le bas,
vers le haut ou vers zéro.
Comme pour les indicateurs d'exception, un code qui observe ou modifie l'environnement flottant doit être écrit avec
FENV_ACCESS activé.
| Macro | Description | Depuis |
|---|---|---|
FE_DOWNWARD |
Arrondi vers le bas. | C99 |
FE_TONEAREST |
Arrondi au plus proche. | C99 |
FE_TONEARESTFROMZERO |
Arrondi au plus proche, avec départ de zéro en cas d'égalité. | C23 |
FE_TOWARDZERO |
Arrondi vers zéro. | C99 |
FE_UPWARD |
Arrondi vers le haut. | C99 |
fegetround renvoie la direction d'arrondi dynamique courante. fesetround tente d'installer
une nouvelle direction d'arrondi. La fonction renvoie 0 uniquement si la demande a été acceptée.
Le programme suivant sauvegarde le mode d'arrondi courant, force un arrondi vers le bas pour un calcul, puis restaure le mode initial.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
#include <fenv.h> #include <stdio.h> #pragma STDC FENV_ACCESS ON int main() { int oldRound = fegetround(); if ( fesetround( FE_DOWNWARD ) != 0 ) { puts( "FE_DOWNWARD non supporte" ); return 1; } printf( "Arrondi vers le bas : %.20f\n", 1.0 / 10.0 ); fesetround( oldRound ); printf( "Mode restaure : %d\n", fegetround() == oldRound ); return 0; } |
Une exécution possible produit un résultat de ce type.
Arrondi vers le bas : 0.09999999999999999167 Mode restaure : 1
Améliorations / Corrections
Vous avez des améliorations (ou des corrections) à proposer pour ce document : je vous remerçie par avance de m'en faire part, cela m'aide à améliorer le site.
Emplacement :
Description des améliorations :