Números Complexos com C++

por Fabio A. Mazzarino

Até o STL quem quisesse trabalhar com números complexos em C ou C++ teria que desenvolver sua própria biblioteca. Mas agora temos várias funções para manipulação de números complexos.

Para representar números complexos existe um template chamado std::complex. Juntamente com o template foram definidos um conjunto de funções e sobrecargas de operadores:

#include <complex>
#include <iostream>

int main() {
    std::complex<double> x(1, 0), y(0, 1);
    std::cout << "x: " << x << std::endl;
    std::cout << "y: " << y.real() << " + " << y.imag() << "i" << std::endl;
    std::cout << "x + y: " << x + y << std::endl;
    std::cout << "x * y: " << x * y << std::endl;
    std::cout << "abs(x): " << std::abs(x) << std::endl;
    std::cout << "norm(x): " << std::norm(x) << std::endl;

    std::complex<double> a = std::polar(1.0, 45 * 3.1415926/180);
    std::complex<double> b(1, 1);
    std::cout << "a: " << a.real() << " + " << a.imag() << "i" << std::endl;
    std::cout << "b polar: " << std::abs(b) << ", " << std::arg(b) * 180/3.1415926 << std::endl;
}

A saída será a seguinte:

x: (1,0)
y: 0 + 1i
x + y: (1,1)
x * y: (0,1)
abs(x): 1
norm(x): 1
a: 0.707107 + 0.707107i
b polar: 1.41421, 45

Além de outras funções trigonométricas

Operadores Sobrecarregados.

Abaixo a lista dos operadores sobrecarregados para utilização de números complexos:

Operadores de Atribuição

+=, -=, *=, /=,

  • = – atribuição
  • += – atribuição com adição
  • -= – atribuição com subtração
  • *= – atribuição com multiplicação
  • /= – atribuição com subtração

Operadores Aritméticos

  • + – adição
  • – – subtração
  • * – multiplicação
  • / – divisão

Operadores de Comparação

  • == – igualdade
  • != – diferença

Operadores de Stream

  • >> – operador de stream de leitura
  • << – operador de stream de escrita