I have recently been fortunate enough to venture back into the world of math, specifically dealing with the idea of complex numbers. I am not sure how many developers are really into math so I will recap some concepts of complex numbers.
One of the main properties of a real number is that it square is nonnegative. For example, there is no real number x for which the following equation is true:
x² = -1
To help solve this kind of problem, a number called the imaginary unit was introduced (i). The imaginary unit is the number whose square is –1, that is
i² = -1
The system that results from introducing the number i is called the complex number system. Complex numbers are numbers of the form a + bi, where a and b are real numbers . The real number a is referred to as the real part of the number a + bi, while the real number b is called the imaginary part of a + bi. For example the complex number -2 + 3i has the real part of -2 and the imaginary part of 3.
Now there are some basic rules for adding, subtracting and multiplying complex numbers as follows:
- (a + bi) + (c + di) = (a + c) + (c + d)i
- (a + bi) - (c + di) = (a - c) + (c - d)i
- (a + bi) * (c + di) = (ac - db) + (ad - bc)i
In .NET 4.0 we saw the introduction of a new struct designed to represent the complex number called Complex. With this new type the complex number addition, and multiplication patterns become really easy.
using System.Numerics; Complex cpx1 = new Complex(2, 3); Complex cpx2 = new Complex(4, 6); Complex cpx3 = new Complex(1, 5); Complex cpxsum = cpx1 + cpx2 - cpx3; // produces 5 + 4i Complex cpxsum2 = cpx1 * cpx3; // produces -13 + 13i