## Introduction

Here you go: a simple but mathematically rigorous implementation of complex numbers in one small C# library. No problem in square rooting negative numbers anymore!

## Functions

- Absolute value
- Addition
- Argument
- Conjugation
- Cosine
- Exponential function
- Exponentiation
- Division
- Hyperbolic functions (Sinh, Cosh, Tanh, Coth, Sech, Csch)
- Logarithm
- Multiplication
- Sine
- Square root
- Subtraction

## Using the code

Either add a reference to *CompLib.dll* to your project, or directly use the class *Complex.cs* within your project.

The actual usage is intuitive:

Complex I = Complex.I;
Complex a = new Complex(1, 3);
Complex a2 = 1 + 3 * I;
Complex z = Complex.Pow((Complex.Sin(1/(1+I))), 1/3);

## Points of interest

One more thing: Complex logarithm is not a unique operation; the main value is computed as is common in the CAS world. E.g., the equation z^4 = -1 has four complex solutions, but only one is returned when trying "`z = Complex.Sqrt(Complex.Sqrt(-1));`

" (as does Maple, for instance). This is due to the computation of the exponentiation:

Pow(a,b) := Exp(b * Log(a))

## History

### Coming soon

- init complex number with format string such as "3+4i" using regex.

### Update July 3, 2007 #2

**Major bug in Arg() fixed** (thanks Petr Stanislav!); this affects `Log()`

, `Pow()`

, and `Sqrt()`

.

### Update July 3, 2007

- Added hyperbolic functions.

### Update June 10, 2007

- Replaced ^-operator with "
`public static Complex Pow`

", similar to `Math.Pow`

.

### Update June 7, 2007

- Added
`Zero`

and `One`

as constants (e.g., use "`Complex z = Complex.One;`

" instead of "`Complex z = new Complex(1)`

").
- Major bug of division operation removed (using
`a/b = a*Conj(b)*(1/(Abs(b)*Abs(b))`

now).
`ToString`

method bug fixed.