fegetround
, fesetround
Obtém ou define o modo de arredondamento de ponto flutuante atual.
Sintaxe
int fegetround(void);
int fesetround(int round_mode);
Parâmetros
round_mode
O modo de arredondamento a ser definido, como as macros de arredondamento de ponto flutuante. Se o valor não for igual a uma das macros de arredondamento de ponto flutuante, o modo de arredondamento não será alterado.
Valor retornado
Em caso de sucesso, fegetround
retorna o modo de arredondamento como um dos valores de macro de arredondamento de ponto flutuante. Ele retornará um valor negativo se o modo de arredondamento atual não puder ser determinado.
Em caso de sucesso, fesetround
retorna 0. Caso contrário, será retornado um valor diferente de zero.
Comentários
As operações de ponto flutuante podem usar um dos vários modos de arredondamento. Esses modos controlam a direção para a qual os resultados das operações de ponto flutuante são arredondados quando os resultados são armazenados. Aqui estão os nomes e comportamentos das macros de arredondamento de ponto flutuante definidas em <fenv.h>:
Macro | Descrição |
---|---|
FE_DOWNWARD |
Arredondar para o infinito negativo. |
FE_TONEAREST |
Arredondar para o mais próximo. |
FE_TOWARDZERO |
Arredondar para zero. |
FE_UPWARD |
Arredondar para o infinito positivo. |
O comportamento padrão de FE_TONEAREST
é arredondar os resultados no meio do caminho entre valores representáveis em direção ao valor mais próximo com um bit par (0) menos significativo.
O modo de arredondamento atual afeta essas operações:
- Conversões de cadeia de caracteres.
- Os resultados de operadores aritméticos de ponto flutuante fora das expressões constantes.
- As funções de arredondamento da bibliotecas, como
rint
enearbyint
. - Valores de retorno de funções matemáticas da biblioteca padrão.
O modo de arredondamento atual não afeta estas operações:
- As funções de biblioteca
trunc
,ceil
,floor
elround
. - Ponto flutuante para conversões e transmissões implícitas de inteiro, que sempre arredondam em direção a zero.
- Os resultados dos operadores aritméticos de ponto flutuante em expressões de constante, que sempre são arredondados para o valor mais próximo.
Para usar essas funções, você deve desligar otimizações de ponto flutuante que poderiam impedir o acesso usando a diretiva #pragma fenv_access(on)
antes da chamada. Para obter mais informações, consulte fenv_access
.
Importante
Antes do Windows 10 versão 14393, fenv.h
definido FE_UPWARD = 0x0100
e FE_DOWNWARD = 0x0200
. No Windows versão 14393, esse cabeçalho foi atualizado para resolver um bug no qual algumas APIs seriam interpretadas FE_UPWARD
como FE_DOWNWARD
, e vice-versa. A partir da versão 14393 FE_UPWARD = 0x0200
do Windows e FE_DOWNWARD = 0x0100
, revertendo seus valores anteriores.
Se você compilou seu aplicativo em uma versão antiga do SDK do Windows (esse problema depende da versão do SDK, não da versão do sistema operacional ou da versão do VS), poderá encontrar esse problema. Atualize seu aplicativo para direcionar o SDK do Windows mais recente para que as definições e FE_DOWNWARD
sejam consistentes com a implementação do FE_UPWARD
Windows. Se você não puder atualizar seu aplicativo para direcionar um SDK do Windows posterior, poderá definir FE_UPWARD
as 0x0100
e FE_DOWNWARD
as 0x0200
em seu código.
Requisitos
Função | Cabeçalho C | Cabeçalho C++ |
---|---|---|
fegetround , fesetround |
<fenv.h> |
<cfenv> |
Para obter mais informações, consulte Compatibilidade.
Confira também
Referência alfabética de função
nearbyint
, nearbyintf
, nearbyintl
rint
, rintf
, rintl
lrint
, lrintf
, lrintl
, llrint
, llrintf
, , llrintl