Un número complejo se expresa de la forma z = a + b * i, donde:
a es la parte real (un número real),
b es la parte imaginaria (también un número real), y
i es la unidad imaginaria, que cumple i^2 = -1.
El conjugado del número complejo z = a + b * i viene dado por:
zc = a - b * i
El valor absoluto (o módulo) de z se define como:
|z| = sqrt(a^2 + b^2)
El cuadrado del valor absoluto se calcula como el producto de z y su conjugado zc:
|z|^2 = z * zc = a^2 + b^2
La suma de dos números complejos z1 = a + b * i y z2 = c + d * i se calcula sumando sus partes real e imaginaria por separado:
z1 + z2 = (a + b * i) + (c + d * i)
= (a + c) + (b + d) * i
La diferencia de dos números complejos se obtiene restando sus partes respectivas:
z1 - z2 = (a + b * i) - (c + d * i)
= (a - c) + (b - d) * i
El producto de dos números complejos se define como:
z1 * z2 = (a + b * i) * (c + d * i)
= (a * c - b * d) + (b * c + a * d) * i
El recíproco de un número complejo distinto de cero viene dado por:
1 / z = 1 / (a + b * i)
= a / (a^2 + b^2) - b / (a^2 + b^2) * i
La división de un número complejo entre otro viene 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 (la base del logaritmo neperiano) a un exponente complejo puede expresarse con la fórmula de Euler:
e^(a + b * i) = e^a * e^(b * i)
= e^a * (cos(b) + i * sin(b))
Dado que no debes usar el soporte integrado para números complejos, implementa las siguientes operaciones:
Tendrás que implementar tu propio operador de igualdad para el objeto ComplexNumber.
Esto plantea el reto de comparar dos números de coma flotante.
Puede que te resulte útil usar el método isApproximatelyEqual(to:absoluteTolerance:), que se encuentra en la biblioteca Numerics.
Debido a problemas de rendimiento, solo tendrás acceso a la parte RealModule.
Para importarla, basta con escribir import RealModule al principio del fichero.
Una tolerancia de 0.00001 debería ser suficiente para pasar los tests.
La biblioteca ya está importada en el proyecto, así que solo tienes que importarla en tu fichero.
También eres libre de implementar tu propio método para comparar los dos números complejos.
Regístrate en Exercism para aprender y dominar Swift con 35 conceptos116 ejercicios y mentoría humana real, todo gratis.