# Complex Numbers A complex number is a number in the form `a + b * i` where `a` and `b` are real and `i` satisfies `i^2 = -1`. `a` is called the real part and `b` is called the imaginary part of `z`. The conjugate of the number `a + b * i` is the number `a - b * i`. The absolute value of a complex number `z = a + b * i` is a real number `|z| = sqrt(a^2 + b^2)`. The square of the absolute value `|z|^2` is the result of multiplication of `z` by its complex conjugate. The sum/difference of two complex numbers involves adding/subtracting their real and imaginary parts separately: `(a + i * b) + (c + i * d) = (a + c) + (b + d) * i`, `(a + i * b) - (c + i * d) = (a - c) + (b - d) * i`. Multiplication result is by definition `(a + i * b) * (c + i * d) = (a * c - b * d) + (b * c + a * d) * i`. The reciprocal of a non-zero complex number is `1 / (a + i * b) = a/(a^2 + b^2) - b/(a^2 + b^2) * i`. Dividing a complex number `a + i * b` by another `c + i * d` gives: `(a + i * b) / (c + i * d) = (a * c + b * d)/(c^2 + d^2) + (b * c - a * d)/(c^2 + d^2) * i`. Exponent of a complex number can be expressed as `exp(a + i * b) = exp(a) * exp(i * b)`, and the last term is given by Euler's formula `exp(i * b) = cos(b) + i * sin(b)`. Implement the following operations: - addition, subtraction, multiplication and division of two complex numbers, - conjugate, absolute value, exponent of a given complex number. Assume the programming language you are using does not have an implementation of complex numbers. You also need to implement a `equal/2` function. For this you can consider two numbers as equal, when the difference of each component is less than 0.005. ## Running tests In order to run the tests, issue the following command from the exercise directory: For running the tests provided, `rebar3` is used as it is the official build and dependency management tool for erlang now. Please refer to [the tracks installation instructions](http://exercism.io/languages/erlang/installation) on how to do that. In order to run the tests, you can issue the following command from the exercise directory. ```bash $ rebar3 eunit ``` ### Test versioning Each problem defines a macro `TEST_VERSION` in the test file and verifies that the solution defines and exports a function `test_version` returning that same value. To make tests pass, add the following to your solution: ```erlang -export([test_version/0]). test_version() -> 1. ``` The benefit of this is that reviewers can see against which test version an iteration was written if, for example, a previously posted solution does not solve the current problem or passes current tests. ## Questions? For detailed information about the Erlang track, please refer to the [help page](http://exercism.io/languages/erlang) on the Exercism site. This covers the basic information on setting up the development environment expected by the exercises. ## Source Wikipedia [https://en.wikipedia.org/wiki/Complex_number](https://en.wikipedia.org/wiki/Complex_number) ## Submitting Incomplete Solutions It's possible to submit an incomplete solution so you can see how others have completed the exercise.