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

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).
┌─────────────────────────────────────────────────────────────────────────────┬───────────────┬─────────┐
│ Interface │ Atributo │ Valor │
├─────────────────────────────────────────────────────────────────────────────┼───────────────┼─────────┤
│ 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)