Eine komplexe Zahl wird in der Form z = a + b * i ausgedrückt, wobei:
a der Realteil ist (eine reelle Zahl),
b der Imaginärteil ist (ebenfalls eine reelle Zahl), und
i die imaginäre Einheit ist, für die i^2 = -1 gilt.
Die Konjugierte der komplexen Zahl z = a + b * i ist gegeben durch:
zc = a - b * i
Der Betrag (oder Modul) von z ist definiert als:
|z| = sqrt(a^2 + b^2)
Das Quadrat des Betrags wird als Produkt von z und seiner Konjugierten zc berechnet:
|z|^2 = z * zc = a^2 + b^2
Die Summe zweier komplexer Zahlen z1 = a + b * i und z2 = c + d * i berechnest du, indem du ihre Real- und Imaginärteile getrennt addierst:
z1 + z2 = (a + b * i) + (c + d * i)
= (a + c) + (b + d) * i
Die Differenz zweier komplexer Zahlen erhältst du, indem du die jeweiligen Teile subtrahierst:
z1 - z2 = (a + b * i) - (c + d * i)
= (a - c) + (b - d) * i
Das Produkt zweier komplexer Zahlen ist definiert als:
z1 * z2 = (a + b * i) * (c + d * i)
= (a * c - b * d) + (b * c + a * d) * i
Für den Kehrwert einer komplexen Zahl ungleich null gilt:
1 / z = 1 / (a + b * i)
= a / (a^2 + b^2) - b / (a^2 + b^2) * i
Für die Division einer komplexen Zahl durch eine andere gilt:
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
Potenziert man e (die Basis des natürlichen Logarithmus) mit einem komplexen Exponenten, lässt sich das mit der eulerschen Formel ausdrücken:
e^(a + b * i) = e^a * e^(b * i)
= e^a * (cos(b) + i * sin(b))
Da du keine eingebaute Unterstützung für komplexe Zahlen verwenden sollst, implementiere die folgenden Operationen:
Für das Objekt ComplexNumber musst du einen eigenen Gleichheitsoperator implementieren.
Das bringt die Herausforderung mit sich, zwei Gleitkommazahlen zu vergleichen.
Nützlich sein könnte die Methode isApproximatelyEqual(to:absoluteTolerance:) aus der Bibliothek Numerics.
Aus Performance-Gründen hast du nur Zugriff auf den RealModule-Teil.
Um es zu importieren, schreibst du einfach import RealModule an den Anfang der Datei.
Eine Toleranz von 0.00001 sollte ausreichen, um die Tests zu bestehen.
Die Bibliothek ist bereits im Projekt importiert, du musst sie also nur noch in deine Datei importieren.
Es steht dir auch frei, deine eigene Methode zu implementieren, um die beiden komplexen Zahlen zu vergleichen.
Melde dich bei Exercism an, um Swift mit 35 Konzepte116 Übungen und echtem menschlichen Mentoring zu lernen und zu meistern, alles kostenlos.