Namespaces
Variants

fegetround, fesetround

From cppreference.net
< c ‎ | numeric ‎ | fenv
Definido en el encabezado <fenv.h>
int fesetround ( int round ) ;
(1) (desde C99)
int fegetround ( ) ;
(2) (desde C99)

1) Intenta establecer la dirección de redondeo de punto flotante igual al argumento round , que se espera que sea una de las macros de redondeo de punto flotante .

2) Retorna el valor de la macro de redondeo de punto flotante que corresponde a la dirección de redondeo actual.

Contenidos

Parámetros

round - dirección de redondeo, una de macros de redondeo de punto flotante

Valor de retorno

1) 0 en caso de éxito, distinto de cero en caso contrario.

2) la macro de redondeo de punto flotante que describe la dirección de redondeo actual o un valor negativo si la dirección no puede determinarse.

Notas

El modo de redondeo actual, que refleja los efectos del más reciente fesetround , también puede consultarse con FLT_ROUNDS .

Ejemplo

#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)
{
    /* Dirección de redondeo por defecto */
    show_fe_current_rounding_direction();
    printf("+11.5 -> %+4.1f\n", rint(+11.5)); /* punto medio entre dos enteros */
    printf("+12.5 -> %+4.1f\n", rint(+12.5)); /* punto medio entre dos enteros */
    /* Guardar la dirección de redondeo actual. */
    int curr_direction = fegetround();
    /* Cambiar temporalmente la dirección de redondeo actual. */
    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));
    /* Restaurar la dirección de redondeo por defecto. */
    fesetround(curr_direction);
    show_fe_current_rounding_direction();
    return 0;
}

Salida posible:

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

Referencias

  • Estándar C23 (ISO/IEC 9899:2024):
  • 7.6.3.1 La función fegetround (p: TBD)
  • 7.6.3.2 La función fesetround (p: TBD)
  • Estándar C17 (ISO/IEC 9899:2018):
  • 7.6.3.1 La función fegetround (p: TBD)
  • 7.6.3.2 La función fesetround (p: TBD)
  • Estándar C11 (ISO/IEC 9899:2011):
  • 7.6.3.1 La función fegetround (p: 212)
  • 7.6.3.2 La función fesetround (p: 212-213)
  • Estándar C99 (ISO/IEC 9899:1999):
  • 7.6.3.1 La función fegetround (p: 193)
  • 7.6.3.2 La función fesetround (p: 193-194)

Véase también

redondea a un entero usando el modo de redondeo actual
(función)
(C99) (C99) (C99) (C99) (C99) (C99) (C99) (C99) (C99)
redondea a un entero usando el modo de redondeo actual con
excepción si el resultado difiere
(función)
C++ documentation para fegetround , fesetround