Ένας μιγαδικός αριθμός εκφράζεται με τη μορφή z = a + b * i, όπου:
το a είναι το πραγματικό μέρος (ένας πραγματικός αριθμός),
το b είναι το φανταστικό μέρος (επίσης ένας πραγματικός αριθμός), και
το i είναι η φανταστική μονάδα που ικανοποιεί τη σχέση i^2 = -1.
Ο συζυγής του μιγαδικού αριθμού z = a + b * i δίνεται από τη σχέση:
zc = a - b * i
Η απόλυτη τιμή (ή μέτρο) του z ορίζεται ως:
|z| = sqrt(a^2 + b^2)
Το τετράγωνο της απόλυτης τιμής υπολογίζεται ως το γινόμενο του z και του συζυγούς του zc:
|z|^2 = z * zc = a^2 + b^2
Το άθροισμα δύο μιγαδικών αριθμών z1 = a + b * i και z2 = c + d * i υπολογίζεται προσθέτοντας χωριστά τα πραγματικά και τα φανταστικά μέρη τους:
z1 + z2 = (a + b * i) + (c + d * i)
= (a + c) + (b + d) * i
Η διαφορά δύο μιγαδικών αριθμών προκύπτει αφαιρώντας τα αντίστοιχα μέρη τους:
z1 - z2 = (a + b * i) - (c + d * i)
= (a - c) + (b - d) * i
Το γινόμενο δύο μιγαδικών αριθμών ορίζεται ως:
z1 * z2 = (a + b * i) * (c + d * i)
= (a * c - b * d) + (b * c + a * d) * i
Ο αντίστροφος ενός μη μηδενικού μιγαδικού αριθμού δίνεται από τη σχέση:
1 / z = 1 / (a + b * i)
= a / (a^2 + b^2) - b / (a^2 + b^2) * i
Η διαίρεση ενός μιγαδικού αριθμού με έναν άλλον δίνεται από τη σχέση:
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
Η ύψωση του e (της βάσης του φυσικού λογάριθμου) σε μιγαδικό εκθέτη μπορεί να εκφραστεί με τον τύπο του Euler:
e^(a + b * i) = e^a * e^(b * i)
= e^a * (cos(b) + i * sin(b))
Δεδομένου ότι δεν πρέπει να χρησιμοποιήσεις την ενσωματωμένη υποστήριξη για μιγαδικούς αριθμούς, υλοποίησε τις παρακάτω πράξεις:
Θα χρειαστεί να υλοποιήσεις τον δικό σου τελεστή ισότητας για το αντικείμενο ComplexNumber.
Εδώ προκύπτει η πρόκληση να συγκρίνεις δύο αριθμούς κινητής υποδιαστολής.
Μπορεί να σου φανεί χρήσιμη η μέθοδος isApproximatelyEqual(to:absoluteTolerance:), την οποία θα βρεις στη βιβλιοθήκη Numerics.
Λόγω ζητημάτων απόδοσης, θα έχεις πρόσβαση μόνο στο τμήμα RealModule.
Για να το εισάγεις, γράψε απλώς: import RealModule στην αρχή του αρχείου.
Μια ανοχή 0.00001 θα πρέπει να είναι αρκετή για να περάσεις τα τεστ.
Η βιβλιοθήκη είναι ήδη εισαγμένη στο project, οπότε το μόνο που μένει είναι να την εισάγεις στο αρχείο σου.
Είσαι επίσης ελεύθερος να υλοποιήσεις τη δική σου μέθοδο για να συγκρίνεις τους δύο μιγαδικούς αριθμούς.
Γράψου στο Exercism για να μάθεις και να κατακτήσεις Swift με 35 έννοιες116 ασκήσεις και πραγματική καθοδήγηση από ανθρώπους, όλα δωρεάν.