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 e nearbyint.
  • 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 e lround.
  • 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 0x01000x0200 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, lrintlllrintllrintfllrintl