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.
Retornar valor
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 para qual direção 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 interpretariam FE_UPWARD
como FE_DOWNWARD
, e vice-versa. A partir do Windows versão 14393 FE_UPWARD = 0x0200
e FE_DOWNWARD = 0x0100
, invertendo 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 de 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
como e FE_DOWNWARD
como 0x0100
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 de função alfabética
nearbyint
, nearbyintf
, nearbyintl
rint
, rintf
, rintl
lrint
, , , , lrintf
, lrintl
llrint
llrintf
llrintl
Comentários
https://aka.ms/ContentUserFeedback.
Em breve: Ao longo de 2024, eliminaremos os problemas do GitHub como o mecanismo de comentários para conteúdo e o substituiremos por um novo sistema de comentários. Para obter mais informações, consulteEnviar e exibir comentários de