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 :
Définis un tuple cmplx avec les slots real et imaginary. Les accesseurs de slot real>> et imaginary>> viennent gratuitement avec la définition du tuple et permettent aux tests de lire les composantes.
<cmplx> ( real imag -- cmplx ) : construit un nombre complexe.>cmplx ( pair -- cmplx ) : construit un cmplx à partir de { real imaginary }.cmplx>pair ( cmplx -- pair ) : renvoie { real imaginary }.c+ ( a b -- c ), c- ( a b -- c ), c* ( a b -- c ), c/ ( a b -- c ) : opérations arithmétiques sur deux nombres complexes.c-abs ( a -- |a| ) : valeur absolue (un réel).c-conj ( a -- a* ) : conjugué complexe.c-exp ( z -- e^z ) : exponentielle complexe.Les génériques MATH: de Factor (+, -, *, /) ne font de la répartition que sur les types de la hiérarchie mathématique intégrée, c'est pourquoi cet exercice utilise des mots dédiés plutôt que des méthodes sur ces génériques.
Les tests portant sur de l'arithmétique qui mélange des nombres réels et des nombres complexes sont exclus, car toutes les opérations ici se font entre deux valeurs cmplx.
Inscris-toi sur Exercism pour apprendre et maîtriser Factor avec 47 concepts163 exercices, et un vrai mentorat humain, le tout gratuitement.