26.11
2020
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