Um número complexo é expresso na forma z = a + b * i, em que:
a é a parte real (um número real),
b é a parte imaginária (também um número real), e
i é a unidade imaginária, que satisfaz i^2 = -1.
O conjugado do número complexo z = a + b * i é dado por:
zc = a - b * i
O valor absoluto (ou módulo) de z é definido como:
|z| = sqrt(a^2 + b^2)
O quadrado do valor absoluto é calculado como o produto de z pelo seu conjugado zc:
|z|^2 = z * zc = a^2 + b^2
A soma de dois números complexos z1 = a + b * i e z2 = c + d * i é calculada somando suas partes real e imaginária separadamente:
z1 + z2 = (a + b * i) + (c + d * i)
= (a + c) + (b + d) * i
A diferença de dois números complexos é obtida subtraindo as respectivas partes:
z1 - z2 = (a + b * i) - (c + d * i)
= (a - c) + (b - d) * i
O produto de dois números complexos é definido como:
z1 * z2 = (a + b * i) * (c + d * i)
= (a * c - b * d) + (b * c + a * d) * i
O recíproco de um número complexo não nulo é dado por:
1 / z = 1 / (a + b * i)
= a / (a^2 + b^2) - b / (a^2 + b^2) * i
A divisão de um número complexo por outro é dada por:
z1 / z2 = z1 * (1 / z2)
= (a + b * i) / (c + d * i)
= (a * c + b * d) / (c^2 + d^2) + (b * c - a * d) / (c^2 + d^2) * i
Elevar e (a base do logaritmo natural) a um expoente complexo pode ser expresso pela fórmula de Euler:
e^(a + b * i) = e^a * e^(b * i)
= e^a * (cos(b) + i * sin(b))
Como você não deve usar suporte nativo a números complexos, implemente as seguintes operações:
Você vai precisar implementar seu próprio operador de igualdade para o objeto ComplexNumber.
Isso traz o desafio de comparar dois números de ponto flutuante.
Pode ser útil usar o método isApproximatelyEqual(to:absoluteTolerance:), que está na biblioteca Numerics.
Por questões de desempenho, você só terá acesso à parte RealModule.
Para importá-la, basta escrever: import RealModule no topo do arquivo.
Uma tolerância de 0.00001 deve ser suficiente para passar nos testes.
A biblioteca já está no projeto, então basta importá-la no seu arquivo.
Você também pode implementar seu próprio método para comparar os dois números complexos.
Crie sua conta no Exercism para aprender e dominar Swift com 35 conceitos116 exercícios e mentoria humana de verdade, tudo de graça.