Compartir vía


fegetround, fesetround

Obtiene o establece el modo de redondeo de punto flotante actual.

Sintaxis

int fegetround(void);
int fesetround(int round_mode);

Parámetros

round_mode
El modo de redondeo que se va a establecer, como una de las macros de redondeo de punto flotante. Si el valor no es igual a una de las macros de redondeo de punto flotante, el modo de redondeo no cambia.

Valor devuelto

Si se realiza correctamente, fegetround devuelve el modo de redondeo como uno de los valores de la macro de redondeo de punto flotante. Devuelve un valor negativo si no se puede determinar el modo de redondeo actual.

Si se realiza correctamente, fesetround devuelve 0. De lo contrario, devuelve un valor distinto de cero.

Comentarios

Las operaciones de punto flotante pueden usar uno de los distintos modos de redondeo. Estos modos controlan hacia qué dirección se redondean los resultados de las operaciones de punto flotante cuando se almacenan los resultados. Estos son los nombres y comportamientos de las macros de redondeo de punto flotante definidos en <fenv.h>:

Macro Descripción
FE_DOWNWARD Redondeo a infinito negativo.
FE_TONEAREST Redondeo al más próximo.
FE_TOWARDZERO Redondeo a cero.
FE_UPWARD Redondeo a infinito positivo.

El comportamiento predeterminado de FE_TONEAREST es redondear los resultados a mitad del camino entre los valores representables hacia el valor más cercano con un bit par (0) menos significativo.

El modo de redondeo actual afecta a estas operaciones:

  • Las conversiones de cadenas.
  • Los resultados de los operadores aritméticos de punto flotante fuera de las expresiones constantes.
  • Las funciones de redondeo de la biblioteca, como rint y nearbyint.
  • Los valores devueltos de las funciones matemáticas de la biblioteca estándar.

El modo de redondeo actual no afecta a estas operaciones:

  • Las funciones de la biblioteca trunc, ceil, floory lround .
  • Las conversiones implícitas de punto flotante a entero, que siempre se redondean a cero.
  • Los resultados de los operadores aritméticos de punto flotante en expresiones constantes, que siempre se redondean al valor más cercano.

Para usar estas funciones, debe desactivar las optimizaciones de punto flotante que podrían impedir el acceso mediante la directiva #pragma fenv_access(on) antes de la llamada. Para obtener más información, vea fenv_access.

Importante

Antes de Windows 10, versión 14393, fenv.h definida FE_UPWARD = 0x0100 y FE_DOWNWARD = 0x0200. En la versión 14393 de Windows, este encabezado se actualizó para solucionar un error en el que algunas API interpretarían FE_UPWARD como FE_DOWNWARDy viceversa. A partir de la versión 14393 de Windows y FE_UPWARD = 0x0200 FE_DOWNWARD = 0x0100, se invierten sus valores anteriores. Si ha compilado la aplicación en una versión anterior de Windows SDK (este problema depende de la versión del SDK, no de la versión del sistema operativo o de VS), podría ser que encuentre este problema. Actualice la aplicación para que tenga como destino el SDK de Windows más reciente para que las definiciones de y FE_DOWNWARD sean coherentes con la implementación de FE_UPWARD Windows. Si no puedes actualizar la aplicación para que tenga como destino un SDK de Windows posterior, puedes definir FE_UPWARD como 0x0100 y FE_DOWNWARD como 0x0200 en el código.

Requisitos

Función Encabezado C Encabezado C++
fegetround, fesetround <fenv.h> <cfenv>

Para obtener más información, consulte Compatibilidad.

Consulte también

referencia de función alfabética
nearbyint, , nearbyintf, nearbyintl
rint, , rintf, rintl
lrint, lrintf, lrintl, llrint, , llrintf, llrintl