Un nombre complexe s'écrit sous la forme z = a + b * i, où :
a est la partie réelle (un nombre réel),
b est la partie imaginaire (aussi un nombre réel), et
i est l'unité imaginaire qui vérifie i^2 = -1.
Le conjugué du nombre complexe z = a + b * i est donné par :
zc = a - b * i
La valeur absolue (ou module) de z est définie par :
|z| = sqrt(a^2 + b^2)
Le carré de la valeur absolue se calcule comme le produit de z et de son conjugué zc :
|z|^2 = z * zc = a^2 + b^2
La somme de deux nombres complexes z1 = a + b * i et z2 = c + d * i s'obtient en additionnant séparément leurs parties réelles et imaginaires :
z1 + z2 = (a + b * i) + (c + d * i)
= (a + c) + (b + d) * i
La différence de deux nombres complexes s'obtient en soustrayant leurs parties respectives :
z1 - z2 = (a + b * i) - (c + d * i)
= (a - c) + (b - d) * i
Le produit de deux nombres complexes est défini par :
z1 * z2 = (a + b * i) * (c + d * i)
= (a * c - b * d) + (b * c + a * d) * i
L'inverse d'un nombre complexe non nul est donné par :
1 / z = 1 / (a + b * i)
= a / (a^2 + b^2) - b / (a^2 + b^2) * i
La division d'un nombre complexe par un autre est donnée par :
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
Élever e (la base du logarithme népérien) à un exposant complexe peut s'exprimer à l'aide de la formule d'Euler :
e^(a + b * i) = e^a * e^(b * i)
= e^a * (cos(b) + i * sin(b))
Comme tu ne dois pas t'appuyer sur une prise en charge intégrée des nombres complexes, implémente les opérations suivantes :
Tu devras implémenter ton propre opérateur d'égalité pour l'objet ComplexNumber.
Cela te posera le défi de comparer deux nombres à virgule flottante.
Il peut être utile d'utiliser la méthode isApproximatelyEqual(to:absoluteTolerance:), que l'on trouve dans la bibliothèque Numerics.
En raison de problèmes de performance, tu n'auras accès qu'à la partie RealModule.
Pour l'importer, il te suffit d'écrire import RealModule en haut du fichier.
Une tolérance de 0.00001 devrait suffire pour passer les tests.
La bibliothèque est déjà importée dans le projet, il te suffit donc de l'importer dans ton fichier.
Tu es également libre d'implémenter ta propre méthode pour comparer les deux nombres complexes.
Inscris-toi sur Exercism pour apprendre et maîtriser Swift avec 35 concepts116 exercices, et un vrai mentorat humain, le tout gratuitement.