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 :
L'élévation d'un nombre complexe à une puissance nécessite une fonction exponentielle, une fonction sinus et une fonction cosinus, dont aucune n'est disponible en WebAssembly. Heureusement, on peut utiliser une série de Taylor pour les calculer. Il te faut au moins une précision de 1/26! pour correspondre aux valeurs attendues.
exp(x) ≃ 1 + x + x ^ 2 / 2! + x ^ 3 / 3! + x ^ 4 / 4! + ... + x ^ n / n!
sin(x) ≃ x - x ^ 3 / 3! + x ^ 5 / 5! - x ^ 7 / 7! + ... - x ^ n / n!
cos(x) ≃ 1 - x ^ 2 / 2! + x ^ 4 / 4! - x ^ 6 / 6! + ... - x ^ n / n!
Inscris-toi sur Exercism pour apprendre et maîtriser WebAssembly avec 87 exercices, et un vrai mentorat humain, le tout gratuitement.