[ << ] [ < ] [ Acima ] [ > ] [ >> ]         [Topo] [Conteúdo] [Índice] [ ? ]

4 Funções Matemáticas

Esse capítulo descreve as funções matemáticas básicas. Algumas dessas funções estão presentes nas bibliotecas do sistema, mas as versões alternativas fornecidas aqui podem ser usadas como um substituto quando as funções do sistema não estiverem disponíveis.

As funções e macros descritas nesse capítulo são definidas no arquivo de cabeçalho ‘gsl_math.h’.


[ << ] [ < ] [ Acima ] [ > ] [ >> ]         [Topo] [Conteúdo] [Índice] [ ? ]

4.1 Constantes Matemáticas

A biblioteca garante que as constantes matemáticas padrão BSD estão definidas. Para referência, aqui está uma lista das constantes:

M_E

A base de exponenciais, e

M_LOG2E

O logaritmo de e na base 2, \log_2 (e)

M_LOG10E

O logaritmo de e na base 10, \log_10 (e)

M_SQRT2

A raíz quadrada de dois, \sqrt 2

M_SQRT1_2

A raíz quadrada de um meio, \sqrt{1/2}

M_SQRT3

A raíz quadrada de três, \sqrt 3

M_PI

A constante pi, \pi

M_PI_2

Pi dividido por dois, \pi/2

M_PI_4

Pi dividido por quatro, \pi/4

M_SQRTPI

A raíz quadrada de pi, \sqrt\pi

M_2_SQRTPI

Dois dividido pela raíz quadrada de pi, 2/\sqrt\pi

M_1_PI

O recíproco de pi, 1/\pi

M_2_PI

Duas vezes o recíproco de pi, 2/\pi

M_LN10

O logaritmo neperiano de dez, \ln(10)

M_LN2

O logaritmo neperiano de dois, \ln(2)

M_LNPI

O logaritmo neperiano de pi, \ln(\pi)

M_EULER

A constante de Euler, \gamma


[ << ] [ < ] [ Acima ] [ > ] [ >> ]         [Topo] [Conteúdo] [Índice] [ ? ]

4.2 Infinito e Não Número

Macro: GSL_POSINF

Essa macro contém a representação que segue a norma IEEE de infinito positivo, +\infty. O infinito positivo é calculado com base na expressão +1.0/0.0.

Macro: GSL_NEGINF

Essa macro contém a represetação IEEE de infinito negativo, -\infty. O infinito negativo é calculado com base na expressão -1.0/0.0.

Macro: GSL_NAN

Essa macro contém a representação IEEE do símbolo Não-número, NaN. O símbolo NaN é calculado a partir da razão 0.0/0.0.

Function: int gsl_isnan (const double x)

Essa função retorna 1 se x for não-número.

Function: int gsl_isinf (const double x)

Essa função retorna +1 se x for infinito positivo, -1 se x for infinito negativo e 0 de outra forma.(11)

Function: int gsl_finite (const double x)

Essa função retorna 1 se x for um número real, e 0 se for infinito ou não-número.


[ << ] [ < ] [ Acima ] [ > ] [ >> ]         [Topo] [Conteúdo] [Índice] [ ? ]

4.3 Funções Elementares

As seguintes rotinas fornecem implementações portáveis de funções encontradas na biblioteca matemátida do BSD (12). Quando versões nativas não estiverem disponíveis as funções descritas aqui podem ser usadas no lugar delas. A substituição pode ser feita automaticamente se você usa autoconf para compilar sua aplicação (veja seção Funções de portabilidade).

Function: double gsl_log1p (const double x)

Essa função calcula o valor de \log(1+x) por um caminho que é preciso para pequenos valores de x. Fornece uma alternativa para a função log1p(x) da biblioteca matemática do BSD.

Function: double gsl_expm1 (const double x)

Essa função calcula o valor de \exp(x)-1 por um caminho que é preciso para pequenos valores de x. Fornece uma alternativa para a função expm1(x) da biblioteca matemática do BSD.

Function: double gsl_hypot (const double x, const double y)

Essa função calcula o valor de \sqrt{x^2 + y^2} de uma forma que evita overflows (13). Essa função fornece uma alternativa à função hypot(x,y) da biblioteca matemática do BSD.

Function: double gsl_hypot3 (const double x, const double y, const double z)

Essa função calcula o valor de \sqrt{x^2 + y^2 + z^2} de uma forma que evitar overflows.

Function: double gsl_acosh (const double x)

Essa função calcula o valor de \arccosh(x). Essa função fornece uma alternativa para a função matemática padrão acosh(x).

Function: double gsl_asinh (const double x)

Essa função calcula o valor de \arcsinh(x). Essa função fornece uma alternativa para a função matemática padrão asinh(x).

Function: double gsl_atanh (const double x)

Essa função calcula o valor de \arctanh(x). Essa função fornece uma alternativa para a função matemática padrão atanh(x).

Function: double gsl_ldexp (double x, int e)

Essa função calcula o valor de x * 2^e. Essa função fornece uma alternativa para a função matemática padrão ldexp(x,e).

Function: double gsl_frexp (double x, int * e)

Essa função quebra o número x em sua fração normalizada f e expoente e, de forma que x = f * 2^e e 0.5 <= f < 1. A função retorna f e armazena o expoente em e. Se x for zero, ambos f e e são ajustados para zero. Essa função fornece uma alternativa para a função matemática padrão frexp(x, e). (14)


[ << ] [ < ] [ Acima ] [ > ] [ >> ]         [Topo] [Conteúdo] [Índice] [ ? ]

4.4 Potência de pequenos inteiros

Uma reclamação comum sobre a biblioteca C padrão é sua necessidade de uma função para calcular (pequenas) potências inteiras. A GSL fornece algumas funções simples para preencher essa lacuna. Por razões de eficiência, essas funções não verificam condições de overflow ou de underflow (15).

Function: double gsl_pow_int (double x, int n)
Function: double gsl_pow_uint (double x, unsigned int n)

Esses rotinas calculam a potência x^n usando o inteiro n. A potência é calculada eficientemente—por exemplo, x^8 é calculado usando ((x^2)^2)^2, requerendo somente 3 multiplicações. A versão dessa função que também calcula o erro numérico no resultado está disponível como gsl_sf_pow_int_e.

Function: double gsl_pow_2 (const double x)
Function: double gsl_pow_3 (const double x)
Function: double gsl_pow_4 (const double x)
Function: double gsl_pow_5 (const double x)
Function: double gsl_pow_6 (const double x)
Function: double gsl_pow_7 (const double x)
Function: double gsl_pow_8 (const double x)
Function: double gsl_pow_9 (const double x)

Essas funções podem ser usadas para calcular pequenos expoentes inteiros x^2, x^3, etc. eficientemente. As funções irão ser incluídas no programa quando HAVE_INLINE for definida, de forma que o uso dessas funções deve ser tão eficiente quanto explicitamente escrever a correspondente expressão produto.

#include <gsl/gsl_math.h>
double y = gsl_pow_4 (3.141)  /* compute 3.141**4 */

[ << ] [ < ] [ Acima ] [ > ] [ >> ]         [Topo] [Conteúdo] [Índice] [ ? ]

4.5 Testando o Sinal de Números

Macro: GSL_SIGN (x)

A macro GSL_SIGN retorna o sinal de x. GSL_SIGN é definida como ((x) >= 0 ? 1 : -1). Note que com essa definição o sinal de zero é positivo (apesar de seu bit de sinal IEEE).


[ << ] [ < ] [ Acima ] [ > ] [ >> ]         [Topo] [Conteúdo] [Índice] [ ? ]

4.6 Testando Números Pares e Ímpares

Macro: GSL_IS_ODD (n)

A macro GSL_IS_ODD avalia para 1 se n for ímpar e 0 se n for par. O argumento n deve ser do tipo de dado inteiro.

Macro: GSL_IS_EVEN (n)

A macro GSL_IS_EVEN é o contrário da GSL_IS_ODD(n). GSL_IS_EVEN avalia para 1 se n for par e 0 se n for ímpar. O argumento n deve ser do tipo de dado inteiro.


[ << ] [ < ] [ Acima ] [ > ] [ >> ]         [Topo] [Conteúdo] [Índice] [ ? ]

4.7 Funções de Máximo e Mínimo

Note que as seguintes macros executam múltiplas avaliações de seus argumentos, de forma que elas não devem ser usadas com argumentos que tenham efeitos colaterais (tais como uma chamada a um gerador de números aleatórios).

Macro: GSL_MAX (a, b)

A macro GSL_MAX retorna o maior entre dois números a e b. GSL_MAX é definida como ((a) > (b) ? (a):(b)).

Macro: GSL_MIN (a, b)

GSL_MIN retorna o menor entre dois números a e b. GSL_MIN é definida como ((a) < (b) ? (a):(b)).

Function: extern inline double GSL_MAX_DBL (double a, double b)

A função GSL_MAX_DBL retorna o maior entre dois números de precisão dupla a e b usando uma função inline. O uso de uma função permite a verificação de tipo de dado dos argumentos como um recurso extra de segurança. Nas plataformas onde funções inline não estão disponíveis a macro GSL_MAX irá ser automaticamente substituída.

Function: extern inline double GSL_MIN_DBL (double a, double b)

A função GSL_MIN_DBL retorna o menor entre dois números de precisão dupla a e b using an inline function. O uso de uma função permite a verificação de tipo de dado dos argumentos como um recurso extra de segurança. Nas plataformas onde funções inline não estão disponíveis a macro GSL_MIN irá ser automaticamente substituída.

Function: extern inline int GSL_MAX_INT (int a, int b)
Function: extern inline int GSL_MIN_INT (int a, int b)

Essas funções retornam o maior ou o menor entre os inteiros a e b usando uma função inline. Nas plataformas onde funções inline não estão disponíveis as macros GSL_MAX e/ou GSL_MIN irão ser automaticamente substituídas.

Function: extern inline long double GSL_MAX_LDBL (long double a, long double b)
Function: extern inline long double GSL_MIN_LDBL (long double a, long double b)

Essas funções retornam o maior ou o menor entre dois números de precisão long double a e b usando uma função inline. Nas plataformas onde funções inline não estão disponíveis a macro GSL_MAX e/ou GSL_MIN irão ser automaticamente substituídas.


[ << ] [ < ] [ Acima ] [ > ] [ >> ]         [Topo] [Conteúdo] [Índice] [ ? ]

4.8 Comparação Aproximada de Números em Ponto Flutuante

Algumas vezes é útil ser capaz de comparar dois números em ponto flutuante de forma aproximada, para permitir erros por arredondamento e erros por abandono. A seguinte funçõ implementa um algoritmo de comparação aproximada entre dois números em ponto flutuante proposto pr D.E. Knuth na Seção 4.2.2 do Seminumerical Algorithms (terceira edição).

Function: int gsl_fcmp (double x, double y, double epsilon)

Essa função determina se x e y são aproximadamente iguais para uma dada exatidão relativa epsilon.

A exatidão relativa é medida usando um intervalo de tamanho 2 \delta, onde \delta = 2^k \epsilon e k é o maior expoente de base-2 de x e y como calculado através da função frexp.

Se x e y localizam-se dentro desse intervalo, eles são considerados aproximadamente iguais e a função retorna 0. De outra forma se x < y, a função retorna -1, ou se x > y, a função retorna +1.

Note que x e y são comparados considerando exatidão relativa, de forma que essa função não é adequada para testar se um valor é aproximadamente zero.

A implementação baseia-se no pacote fcmp de autoria de T.C. Belding.


[ << ] [ >> ]           [Topo] [Conteúdo] [Índice] [ ? ]

Esse documento foi gerado em 23 de Julho de 2013 usando texi2html 5.0.