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
ynearbyint
. - 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
,floor
ylround
. - 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_DOWNWARD
y 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