Namespaces
Variants

fegetround, fesetround

From cppreference.net
< c ‎ | numeric ‎ | fenv
Défini dans l'en-tête <fenv.h>
int fesetround ( int round ) ;
(1) (depuis C99)
int fegetround ( ) ;
(2) (depuis C99)

1) Tente d'établir la direction d'arrondi en virgule flottante égale à l'argument round , qui est censé être l'une des macros d'arrondi en virgule flottante .

2) Retourne la valeur de la macro d'arrondi en virgule flottante qui correspond à la direction d'arrondi actuelle.

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 .

Exemple

#include <fenv.h>
#include <math.h>
#include <stdio.h>
// #pragma STDC FENV_ACCESS ON
void show_fe_current_rounding_direction(void)
{
    printf("current rounding direction:  ");
    switch (fegetround())
    {
           case FE_TONEAREST:  printf ("FE_TONEAREST");  break;
           case FE_DOWNWARD:   printf ("FE_DOWNWARD");   break;
           case FE_UPWARD:     printf ("FE_UPWARD");     break;
           case FE_TOWARDZERO: printf ("FE_TOWARDZERO"); break;
           default:            printf ("unknown");
    };
    printf("\n");
}
int main(void)
{
    /* Direction d'arrondi par défaut */
    show_fe_current_rounding_direction();
    printf("+11.5 -> %+4.1f\n", rint(+11.5)); /* à mi-chemin entre deux entiers */
    printf("+12.5 -> %+4.1f\n", rint(+12.5)); /* à mi-chemin entre deux entiers */
    /* Sauvegarder la direction d'arrondi actuelle. */
    int curr_direction = fegetround();
    /* Modifier temporairement la direction d'arrondi actuelle. */
    fesetround(FE_DOWNWARD);
    show_fe_current_rounding_direction();
    printf("+11.5 -> %+4.1f\n", rint(+11.5));
    printf("+12.5 -> %+4.1f\n", rint(+12.5));
    /* Restaurer la direction d'arrondi par défaut. */
    fesetround(curr_direction);
    show_fe_current_rounding_direction();
    return 0;
}

Sortie possible :

current rounding direction:  FE_TONEAREST
+11.5 -> +12.0
+12.5 -> +12.0
current rounding direction:  FE_DOWNWARD
+11.5 -> +11.0
+12.5 -> +12.0
current rounding direction:  FE_TONEAREST

Références

  • Norme C23 (ISO/CEI 9899:2024) :
  • 7.6.3.1 La fonction fegetround (p: TBD)
  • 7.6.3.2 La fonction fesetround (p: TBD)
  • Norme C17 (ISO/CEI 9899:2018) :
  • 7.6.3.1 La fonction fegetround (p: TBD)
  • 7.6.3.2 La fonction fesetround (p: TBD)
  • Norme C11 (ISO/IEC 9899:2011) :
  • 7.6.3.1 La fonction fegetround (p: 212)
  • 7.6.3.2 La fonction fesetround (p: 212-213)
  • Norme C99 (ISO/CEI 9899:1999) :
  • 7.6.3.1 La fonction fegetround (p : 193)
  • 7.6.3.2 La fonction fesetround (p : 193-194)

Voir aussi

arrondit à un entier en utilisant le mode d'arrondi actuel
(fonction)
(C99) (C99) (C99) (C99) (C99) (C99) (C99) (C99) (C99)
arrondit à un entier en utilisant le mode d'arrondi actuel avec
exception si le résultat diffère
(fonction)
Documentation C++ pour fegetround , fesetround