Trabalhando com Números Complexos

C:
Trabalhando com Números Complexos

Como Fazer:

Em C, os números complexos são suportados pela Biblioteca Padrão, especificamente <complex.h>. Para utilizá-los, declare variáveis com o tipo double complex (ou float complex para precisão simples). Veja como realizar operações básicas:

#include <stdio.h>
#include <complex.h>

int main() {
    double complex z1 = 1.0 + 2.0*I; // Declara um número complexo 1+2i
    double complex z2 = 1.0 - 2.0*I; // Declara outro número complexo 1-2i
    
    // Adição
    double complex sum = z1 + z2;
    printf("Soma: %.2f + %.2fi\n", creal(sum), cimag(sum)); // Saída: Soma: 2.00 + 0.00i

    // Multiplicação
    double complex product = z1 * z2;
    printf("Produto: %.2f + %.2fi\n", creal(product), cimag(product)); // Saída: Produto: 5.00 + 0.00i

    // Conjugado Complexo
    double complex conjugate = conj(z1);
    printf("Conjugado de z1: %.2f + %.2fi\n", creal(conjugate), cimag(conjugate)); // Saída: Conjugado de z1: 1.00 - 2.00i
    
    // Magnitude
    double magnitude = cabs(z1);
    printf("Magnitude de z1: %.2f\n", magnitude); // Saída: Magnitude de z1: 2.24

    // Fase
    double phase = carg(z1);
    printf("Fase de z1: %.2f\n", phase); // Saída em radianos
    
    return 0;
}

Note que I é uma constante representando a unidade imaginária em <complex.h>. Funções como creal() e cimag() extraem as partes real e imaginária, respectivamente, enquanto conj() calcula o conjugado complexo. Para a magnitude e fase (argumento) de números complexos, cabs() e carg() são usadas.

Aprofundamento

O suporte para números complexos em C é relativamente recente, tendo sido padronizado no C99. Antes disso, a aritmética de números complexos em C era trabalhosa, muitas vezes requerendo estruturas de dados e funções personalizadas. A inclusão de <complex.h> e os tipos de dados complexos proporcionaram um significativo impulso às capacidades da linguagem para aplicações científicas e de engenharia. No entanto, vale ressaltar que algumas linguagens, como Python, oferecem suporte mais intuitivo para números complexos por meio de tipos de dados embutidos e um conjunto mais rico de funções de biblioteca. Apesar disso, o desempenho e controle oferecidos por C o tornam uma escolha preferencial para tarefas de computação de alto desempenho, mesmo que isso signifique lidar com uma sintaxe um pouco mais verbosa para a aritmética complexa.