Tipos de Dados Complexos
Números complexos podem incluir uma parte real e uma parte imaginária. As constantes numéricas abordadas anteriormente possuem valores reais. Uma constante com valor imaginário é uma constante numérica real comum seguida de ‘i’.
Para declarar variáveis numéricas como complexas, use a palavra-chave _Complex
. Os tipos de dados complexos padrão em C são de ponto flutuante:
_Complex float foo;
_Complex double bar;
_Complex long double quux;
No entanto, o GNU C também oferece suporte a tipos inteiros complexos.
Como _Complex
é uma palavra-chave assim como float
, double
e long
, essas palavras-chave podem aparecer em qualquer ordem, mas a ordem mostrada acima parece ser a mais lógica.
O GNU C suporta constantes para valores complexos. Por exemplo, 4.0 + 3.0i
tem o valor 4 + 3i
com o tipo _Complex double
. Veja Constantes Imaginárias.
Para extrair as partes real e imaginária de um número complexo, o GNU C fornece as palavras-chave __real__
e __imag__
:
_Complex double foo = 4.0 + 3.0i;
double a = __real__ foo; /* a agora é 4.0. */
double b = __imag__ foo; /* b agora é 3.0. */
O padrão C não inclui essas palavras-chave e, em vez disso, depende de funções definidas em complex.h
para acessar as partes real e imaginária de um número complexo: crealf
, creal
e creall
extraem a parte real de um número complexo de tipo float
, double
ou long double
, respectivamente; cimagf
, cimag
e cimagl
extraem a parte imaginária.
O GNU C também define ‘~’ como um operador para a conjugação complexa, o que significa negar a parte imaginária de um número complexo:
_Complex double foo = 4.0 + 3.0i;
_Complex double bar = ~foo; /* bar agora é 4 - 3i. */
Para compatibilidade com o padrão C, você pode usar a função de biblioteca apropriada: conjf
, conj
ou conjl
.
Nota de compatibilidade:
Para compatibilidade com versões mais antigas do GNU C, a palavra-chave __complex__
também é aceita. No entanto, para usar um recurso mais novo, use a nova palavra-chave _Complex
, conforme definido na ISO C11.
Atualizado
Isto foi útil?