Suporte a expressões matemáticas complexas de C
A CRT (biblioteca do Microsoft C Runtime) fornece funções complexas de biblioteca matemática, incluindo todas as exigidas pela ISO C99. O compilador não dá suporte direto a uma palavra-chave complex
ou _Complex
, portanto, a implementação da Microsoft usa tipos de estrutura para representar números complexos.
Essas funções são implementadas para equilibrar o desempenho com exatidão. Uma vez que produzir o resultado arredondado corretamente pode ter um custo proibitivo, essas funções foram criadas para produzir de forma eficiente um resultado próximo ao resultado arredondado corretamente. Na maioria dos casos, o resultado produzido está dentro de +/-1 unidade de menor precisão (ULP) do resultado arredondado corretamente, embora possa haver casos em que haja maior imprecisão.
As rotinas de expressões matemáticas complexas dependem das funções da biblioteca de expressões matemáticas do ponto flutuante para sua implementação. Essas funções têm implementações diferentes para arquiteturas de CPU diferentes. Por exemplo, o CRT x86 de 32 bits pode ter uma implementação diferente do CRT x64 de 64 bits. Além disso, algumas das funções podem ter várias implementações para uma determinada arquitetura de CPU. A implementação mais eficiente é selecionada dinamicamente em tempo de execução dependendo dos conjuntos de instruções com suporte da CPU. Por exemplo, no CRT x86 de 32 bits, algumas funções têm uma implementação x87 e uma implementação SSE2. Quando executado em uma CPU com suporte para SSE2, é usada a implementação SSE2 mais rápida. Quando executado em uma CPU sem suporte para SSE2, é usada a implementação x87 mais lenta. Uma vez que diferentes implementações das funções da biblioteca de matemática podem usar diferentes instruções de CPU e diferentes algoritmos para produzir seus resultados, as funções podem produzir resultados diferentes entre as CPUs. Na maioria dos casos, os resultados estão dentro de +/-1 ULP do resultado arredondado corretamente, mas os resultados reais podem variar entre as CPUs.
Tipos usados em expressões matemáticas complexas
A implementação da Microsoft do cabeçalho complex.h
define esses tipos como equivalentes para os tipos complexos nativos do padrão C99:
Tipo padrão | Tipo da Microsoft |
---|---|
float complex ou float _Complex |
_Fcomplex |
double complex ou double _Complex |
_Dcomplex |
long double complex ou long double _Complex |
_Lcomplex |
O cabeçalho math.h
define um tipo separado, struct _complex
, usado para a função _cabs
. O tipo struct _complex
não é usado pelas funções matemáticas complexas equivalentes cabs
, cabsf
, cabsl
.
Constantes e macros complexas
I
é definido como o tipo complexo _Fcomplex
inicializado por { 0.0f, 1.0f }
.
Funções trigonométricas
Função | Descrição |
---|---|
cacos , cacosf , cacosl |
Calcular o arco cosseno complexo de um número complexo |
casin , casinf , casinl |
Calcular o arco seno complexo de um número complexo |
catan , catanf , catanl |
Calcular o arco tangente complexo de um número complexo |
ccos , ccosf , ccosl |
Calcular o cosseno complexo de um número complexo |
csin , csinf , csinl |
Calcular o seno complexo de um número complexo |
ctan , ctanf , ctanl |
Calcular a tangente complexa de um número complexo |
Funções hiperbólicas
Função | Descrição |
---|---|
cacosh , cacoshf , cacoshl |
Calcular o arco cosseno hiperbólico complexo de um número complexo |
casinh , casinhf , casinhl |
Calcular o arco seno hiperbólico complexo de um número complexo |
catanh , catanhf , catanhl |
Calcular o arco tangente hiperbólico complexo de um número complexo |
ccosh , ccoshf , ccoshl |
Calcular o cosseno hiperbólico complexo de um número complexo |
csinh , csinhf , csinhl |
Calcular o seno hiperbólico complexo de um número complexo |
ctanh , ctanhf , ctanhl |
Calcular a tangente hiperbólica complexa de um número complexo |
Funções exponenciais e logarítmicas
Função | Descrição |
---|---|
cexp , cexpf , cexpl |
Calcular o exponencial de base complexo e de um número complexo |
clog , clogf , clogl |
Calcular o complexo logaritmo natural (de base e) de um número complexo |
clog10 , clog10f , clog10l |
Calcular o logaritmo de base 10 de um número complexo |
Funções potência e valor absoluto
Função | Descrição |
---|---|
cabs , cabsf , cabsl |
Calcular o valor absoluto complexo (também chamado de norma, módulo ou magnitude) de um número complexo |
cpow , cpowf , cpowl |
Calcule a função de potência complexa |
csqrt , csqrtf , csqrtl |
Calcular a raiz quadrada complexa de um número complexo |
Funções de manipulação
Função | Descrição |
---|---|
_Cbuild , _FCbuild , _LCbuild |
Elaborar um número complexo de partes reais e imaginárias |
carg , cargf , cargl |
Calcular o argumento (também chamado de ângulo de fase) de um número complexo |
cimag , cimagf , cimagl |
Calcular a parte imaginária de um número complexo |
conj , conjf , conjl |
Calcular o conjugado complexo de um número complexo |
cproj , cprojf , cprojl |
Calcular uma projeção de um número complexo na esfera de Reimann |
creal , crealf , creall |
Calcular a parte real de um número complexo |
norm , normf , norml |
Calcular a magnitude quadrada de um número complexo |
Funções de operação
Uma vez que os números complexos não são um tipo nativo no compilador da Microsoft, os operadores aritméticos padrão não são definidos em tipos complexos. Para sua conveniência, essas funções da biblioteca de funções matemáticas complexas são fornecidas para habilitar a manipulação limitada de números complexos no código do usuário:
Função | Descrição |
---|---|
_Cmulcc , _FCmulcc , _LCmulcc |
Multiplicar dois números complexos |
_Cmulcr , _FCmulcr , _LCmulcr |
Multiplicar um número complexo e um número de ponto flutuante |
Confira também
Matemática do tipo genérico
Rotinas de runtime C universais por categoria