This topic has not yet been rated - Rate this topic

Complex.Divide Method

Divides one complex number by another and returns the result.

Namespace:  System.Numerics
Assembly:  System.Numerics (in System.Numerics.dll)
public static Complex Divide(
	Complex dividend,
	Complex divisor
)

Parameters

dividend
Type: System.Numerics.Complex
The complex number to be divided.
divisor
Type: System.Numerics.Complex
The complex number to divide by.

Return Value

Type: System.Numerics.Complex
The quotient of the division.

The division of a complex number, a + bi, by a second complex number, number, c + di, takes the following form:

((ac + bd) / (c 2 + d 2 )) + ((bc - ad) / (c 2 + d 2 )i

If the calculation of the quotient results in an overflow in either the real or imaginary component, the value of that component is either Double.PositiveInfinity or Double.NegativeInfinity.

The Divide method can be used by languages that do not support custom operators. Its behavior is identical to division using the division operator.

The following example divides a complex number by each element in an array of complex numbers.


using System;
using System.Numerics;

public class Example
{
   public static void Main()
   {
      Complex c1 = new Complex(1.2, 2.3);
      Complex[] values = { new Complex(1.2, 2.3), 
                           new Complex(0.5, 0.75), 
                           new Complex(3.0, -5.0) };
      foreach (Complex c2 in values)
         Console.WriteLine("{0} / {1} = {2:N2}", c1, c2, 
                           Complex.Divide(c1, c2));
   }
}
// The example displays the following output:
//       (1.2, 2.3) / (1.2, 2.3) = (1.00, 0.00)
//       (1.2, 2.3) / (0.5, 0.75) = (2.86, 0.31)
//       (1.2, 2.3) / (3, -5) = (-0.23, 0.38)


.NET Framework

Supported in: 4

.NET Framework Client Profile

Supported in: 4

Windows 7, Windows Vista SP1 or later, Windows XP SP3, Windows Server 2008 (Server Core not supported), Windows Server 2008 R2 (Server Core supported with SP1 or later), Windows Server 2003 SP2

The .NET Framework does not support all versions of every platform. For a list of the supported versions, see .NET Framework System Requirements.
Did you find this helpful?
(1500 characters remaining)
Community Content Add
Annotations FAQ
We can't avoid all numerical nastiness...
But yet I see an opportunity for improvement. c^2 + d^2 will result in possibly needless overflow if c and d are big. A numerical analyst would observe:
  c^2 + d^2 = max(c,d)^2 * (1 + (min(c,d)/max(c,d))^2)

When c and d are very small, this computation should gracefully round toward 0. When c and d are big, though, and say max(c,d)^2 doesn't overflow, we simply multiply that maximum by a number no greater than 2.

Same story for computing the magnitude |z| of z = c+di, but I'll detail how I would deal with the needed square root there.