Provided by: manpages-pt-br-dev_4.27.0-1_all bug

NOME

       feclearexcept,  fegetexceptflag,  feraiseexcept,  fesetexceptflag,  fetestexcept,  fegetenv,  fegetround,
       feholdexcept,  fesetround,  fesetenv,  feupdateenv,  feenableexcept,   fedisableexcept,   fegetexcept   -
       tratamento de exceção e arredondamento de ponto flutuante

BIBLIOTECA

       Biblioteca matemática (libm, -lm)

SINOPSE

       #include <fenv.h>

       int feclearexcept(int excepts);
       int fegetexceptflag(fexcept_t *flagp, int excepts);
       int feraiseexcept(int excepts);
       int fesetexceptflag(const fexcept_t *flagp, int excepts);
       int fetestexcept(int excepts);

       int fegetround(void);
       int fesetround(int rounding_mode);

       int fegetenv(fenv_t *envp);
       int feholdexcept(fenv_t *envp);
       int fesetenv(const fenv_t *envp);
       int feupdateenv(const fenv_t *envp);

DESCRIÇÃO

       Estas onze funções foram definidas no C99, e descrevem o tratamento de arredondamento e exceções de ponto
       flutuante (estouro de representação, divisão por zero, etc.).

   Exceções
       A  exceção  divide-by-zero ocorre quando uma operação sobre números finitos produz infinito como resposta
       exata.

       A exceção overflow ocorre quando um resultado tem de ser representado como um número de ponto  flutuante,
       mas tem valor absoluto (muito) maior que o maior número de ponto flutuante (finito) que é representável.

       A exceção underflow ocorre quando um resultado tem de ser representado como um número de ponto flutuante,
       mas tem valor absoluto menor que o menor número de ponto flutuante positivo normalizado (e perderia muita
       precisão se representado como um número desnormalizado).

       A  exceção  inexact  ocorre  quando  o  resultado arredondado de uma operação não é igual ao resultado de
       precisão infinita. Ela pode ocorrer quando quer que overflow ou underflow ocorram.

       A exceção invalid ocorre quando não há resultado bem  definido  para  uma  operação,  como  para  0/0  ou
       infinito - infinito ou sqrt(-1).

   Tratamento de Exceções
       Exceções  são  representadas  de  duas formas: como um único bit (exceção presente/ausente), e esses bits
       correspondem em alguma forma definida pela implementação com posições de bit em um inteiro, e também como
       uma estrutura opaca que pode conter mais informação sobre a exceção (talvez o endereço de código onde ela
       ocorreu).

       Cada uma das macros FE_DIVBYZERO, FE_INEXACT, FE_INVALID, FE_OVERFLOW, FE_UNDERFLOW é definida  quando  a
       implementação  suporta  tratamento  da  exceção  correspondente,  e,  se  sim,  então  define o(s) bit(s)
       correspondente(s), de forma que se possa chamar funções de tratamento de exceções, por exemplo, usando  o
       argumento inteiro FE_OVERFLOW|FE_UNDERFLOW. Outras exceções podem ser suportadas. A macro FE_ALL_EXCEPT é
       o OR bit a bit de todos os bits correspondendo a exceções suportadas.

       A função feclearexcept() desabilita as exceções suportadas representadas pelos bits no seu argumento.

       A  função fegetexceptflag() armazena uma representação do estado dos indicadores de exceção representados
       pelo argumento excepts no objeto opaco *flagp.

       A função feraiseexcept() dispara as exceções suportadas representadas pelos bits em excepts.

       A função fesetexceptflag() define o estado completo para as exceções representadas  por  excepts  para  o
       valor  *flagp. Esse valor deve ter sido obtido por uma chamada anterior a fegetexceptflag() com um último
       argumento que contivesse todos os bits em excepts.

       A função fetestexcept() retorna uma palavra na qual os bits  definidos  são  os  definidos  no  argumento
       excepts e para os quais a exceção correspondente está atualmente habilitada.

   Modo de arredondamento
       O  modo  de  arredondamento determina como o resultado de operações de ponto flutuante é tratado quando o
       resultado não pode ser representado exatamente no significando. Vários modos de arredondamento podem  ser
       fornecidos:  arredondar  para  o  mais  próximo  (o padrão), arredondar para cima (em direção ao infinito
       positivo), arredondar para baixo (em direção ao infinito negativo) e arredondar para zero.

       Cada  uma  das  macros  FE_TONEAREST,  FE_UPWARD,  FE_DOWNWARD  e  FE_TOWARDZERO  é  definida  quando   a
       implementação suporta obter e definir a direção de arredondamento correspondente.

       A função fegetround() retorna a macro correspondente ao modo de arredondamento atual.

       A  função fesetround() define o modo de arredondamento como especificado por seu argumento e retorna zero
       quando for bem sucedida.

       C99 e POSIX.1-2008 especificam  um  identificador,  FLT_ROUNDS,  definido  em  <float.h>,  que  indica  o
       comportamento  de  arredondamento  definido  pela  implementação  para  adição  de  ponto flutuante. Este
       identificador tem um dos seguintes valores:

       -1     O modo de arredondamento não é determinável.

       0      O arredondamento é para 0.

       1      O arredondamento é para o número mais próximo.

       2      O arredondamento é em direção ao infinito positivo.

       3      O arredondamento é em direção ao infinito negativo.

       Outros valores representam modos de arredondamento não padronizados e dependentes da máquina.

       O valor de FLT_ROUNDS deve refletir o modo de arredondamento atual definido por  fesetround()  (mas  veja
       BUGS).

   Ambiente de Ponto Flutuante
       O  ambiente  de  ponto  flutuante  inteiro, incluindo modos de controle e indicadores de estado, pode ser
       tratado como um objeto opaco, de tipo fenv_t. O ambiente padrão é denotado por FE_DFL_ENV (de tipo  const
       fenv_t *).  Essa  é  a  definição  do  ambiente  ao  início do programa e é definida por ISO C como tendo
       arredondamento para o mais próximo, todas as exceções desabilitadas e um modo 'non-stop'  (continuar  nas
       exceções).

       A função fegetenv() salva o ambiente de ponto flutuante atual no objeto *envp.

       A função feholdexcept() faz o mesmo, então zera todos indicadores de exceção, e define um modo 'non-stop'
       (continuar nas exceções), se disponível. Ela retorna zero quando bem sucedida.

       A  função  fesetenv()  restaura  o  ambiente  de  ponto  flutuante  do objeto *envp. Esse objeto deve ser
       reconhecidamente válido, por exemplo, o resultado de uma chamada a fegetenv() ou feholdexcept() ou  igual
       a FE_DFL_ENV. Essa chamada não dispara exceções.

       A  função  feupdateenv() instala o ambiente de ponto flutuante representado pelo objeto *envp, exceto que
       as exceções que estão atualmente disparadas não são desabilitadas.  Depois  de  chamar  essa  função,  as
       exceções disparadas serão o OR bit a bit daquelas previamente definidas com aquelas em *envp. Como antes,
       o objeto *envp deve ser reconhecido como sendo válido.

VALOR DE RETORNO

       Essas funções retornam zero em caso de sucesso e diferente de zero se ocorrer um erro.

ATRIBUTOS

       Para uma explicação dos termos usados nesta seção, consulte attributes(7).
       ┌─────────────────────────────────────────────────────────────────────────────┬───────────────┬─────────┐
       │ InterfaceAtributoValor   │
       ├─────────────────────────────────────────────────────────────────────────────┼───────────────┼─────────┤
       │ feclearexcept(), fegetexceptflag(), feraiseexcept(), fesetexceptflag(),     │ Thread safety │ MT-Safe │
       │ fetestexcept(), fegetround(), fesetround(), fegetenv(), feholdexcept(),     │               │         │
       │ fesetenv(), feupdateenv(), feenableexcept(), fedisableexcept(),             │               │         │
       │ fegetexcept()                                                               │               │         │
       └─────────────────────────────────────────────────────────────────────────────┴───────────────┴─────────┘

PADRÕES

       C11, POSIX.1-2008, IEC 60559 (IEC 559:1989), ANSI/IEEE 854.

HISTÓRICO

       C99, POSIX.1-2001.  glibc 2.1.

NOTAS

   Notas sobre glibc
       Se  possível,  a  Biblioteca C GNU define a macro FE_NOMASK_ENV a qual representa um ambiente em que toda
       exceção disparada causa a ocorrência de uma captura. Você pode testar por essa macro usando  #ifdef.  Ela
       só  é  definida  se  _GNU_SOURCE  estiver  definida.  O  padrão  C99 não define uma forma de definir bits
       individuais na máscara de ponto flutuante, por exemplo, para capturar quando de indicadores  específicos.
       glibc  2.2  suportará  as  funções  feenableexcept()  e  fedisableexcept() para definir capturas de ponto
       flutuante individuais, e fegetexcept() para obter o estado.

       #define _GNU_SOURCE         /* Veja feature_test_macros(7) */
       #include <fenv.h>

       int feenableexcept(int excepts);
       int fedisableexcept(int excepts);
       int fegetexcept(void);

       As funções feenableexcept() e fedisableexcept()  habilitam  (desabilitam)  capturas  para  cada  uma  das
       exceções  representadas  por  excepts  e  retornam o conjunto anterior de exceções habilitadas quando bem
       sucedida, e -1 caso contrário. A função fegetexcept() retorna o conjunto de todas as exceções  atualmente
       habilitadas.

BUGS

       C99  especifica  que  o  valor  de  FLT_ROUNDS  deve refletir alterações no modo de arredondamento atual,
       conforme definido por fesetround(). Atualmente, isso não ocorre: FLT_ROUNDS sempre tem o valor 1.

VEJA TAMBÉM

       math_error(7)

TRADUÇÃO

       A  tradução  para  português  brasileiro  desta  página  man  foi  criada  por  Marcelo   M.   de   Abreu
       <mmabreu@terra.com.br>,    André    Luiz    Fassone    <lonely_wolf@ig.com.br>    e   Rafael   Fontenelle
       <rafaelff@gnome.org>.

       Esta tradução é uma documentação livre; leia a Licença Pública Geral GNU Versão 3 ou  posterior  para  as
       condições de direitos autorais.  Nenhuma responsabilidade é aceita.

       Se  você  encontrar  algum  erro  na  tradução  desta  página  de manual, envie um e-mail para a lista de
       discussão de tradutores.

Linux man-pages 6.9.1                              2 maio 2024                                           fenv(3)