Click here to Skip to main content
65,938 articles
CodeProject is changing. Read more.
Articles / Languages / C#

A C# class for complex numbers

2.82/5 (13 votes)
3 Jul 2007CPOL1 min read 2   478  
Implementation of the most common functions of complex numbers.

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:

C#
Complex I = Complex.I; // imaginary unit
Complex a = new Complex(1, 3); // inits a = 1+3i
Complex a2 = 1 + 3 * I; // a equals a2

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.

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)