# CComplex Class

`CComplex` is a class to work with complex numbers with Free Basic. Complex numbers are represented using the type `_complex`. The real and imaginary part are stored in the members `x` and `y`. There is also a flat api version that you can use alone or in combination with this class (see: Complex Numbers Procedures

    TYPE _complex
       x AS DOUBLE   ' real part
       y AS DOUBLE   ' imaginary part
    END TYPE

Include file: CComplex.inc.

### Constructors

Create a new instance of the CComplex class and assigns the values passed to it.

    CONSTRUCTOR CComplex
    CONSTRUCTOR CComplex (BYVAL x AS DOUBLE = 0, BYVAL y AS DOUBLE = 0)
    CONSTRUCTOR CComplex (BYREF cpx AS CComplex)
    CONSTRUCTOR CComplex (BYREF cpx AS _complex)

Parameter | Description
--- | ---
x, y | Uses the cartesian components (x,y) to set the real and imaginary parts of the complex number.
cpx | An instance of the CComplex class or a _complex structure.

#### Examples

Uses the cartesian components (x,y) to set the real and imaginary parts of the complex number.

    DIM cpx AS CComplex = TYPE(3, 4)
    DIM cpx2 AS CComplex = cpx

An instance of the CComplex class.

    DIM cpx AS CComplex = TYPE(3, 4)
    DIM cpx2 AS CComplex = cpx

A _complex structure.

    DIM cpx AS CComplex = TYPE<_complex>(3, 4)

### Operators

Name | Description
--- | ---
Operator LET | Assigns a value to a CComplex variable.
CAST operators | Converts a CComplex into another data type.
Comparison operators | Compares complex numbers.
Math operators | Add, subtract, multiply or divide complex numbers.

### Methods and Properties

Name | Description
--- | ---
CAbs | Returns the magnitude of this complex number.
CAbs2 | Returns the squared magnitude of this complex number, otherwise known as the complex norm.
CAbsSqr | Returns the absolute square (squared norm) of a complex number.
CACos | Returns the complex arccosine of this complex number.
CACosH | Returns the complex hyperbolic arccosine of this complex number.
CACosHReal | Returns the complex arccosine of this complex number.
CACosReal | Returns the complex arccosine of a real number.
CACot | Returns the complex arccotangent of this complex number.
CACotH | Returns the complex hyperbolic arccotangent of this complex number.
CACsc | Returns the complex arccosecant of this complex number.
CACscH | Returns the complex hyperbolic arccosecant of this complex number.
CACscReal | Returns the complex arccosecant of a real number.
CAdd | Adds a complex number.
CAddImag | Adds an imaginary number.
CAddReal | Adds a real number.
CArcCos | Returns the complex arccosine of this complex number.
CArcCosH | Returns the complex hyperbolic arccosine of this complex number.
CArcCosHReal | Returns the complex arccosine of this complex number.
CArcCosReal | Returns the complex arccosine of a real number.
CArcCot | Returns the complex arccotangent of this complex number.
CArcCotH | Returns the complex hyperbolic arccotangent of this complex number.
CArcCsc | Returns the complex arccosecant of this complex number.
CArcCscH | Returns the complex hyperbolic arccosecant of this complex number.
CArcCscReal | Returns the complex arccosecant of a real number.
CArcSec | Returns the complex arcsecant of this complex number.
CArcSecH | Returns the complex hyperbolic arcsecant of this complex number.
CArcSecReal | Returns the complex arcsecant of a real number.
CArcSin | Returns the complex arcsine of this complex number.
CArcSinH | Returns the complex hyperbolic arcsine of this complex number.
CArcSinReal | Returns the complex arcsine of a real number.
CArcTan | Returns the complex arctangent of this complex number.
CArcTanH | Returns the complex hyperbolic arctangent of this complex number.
CArcTanHReal | Returns the complex hyperbolic arctangent of a real number.
CArg | Returns the argument of this complex number.
CArgument | Returns the argument of this complex number.
CASec | Returns the complex arcsecant of this complex number.
CASecH | Returns the complex hyperbolic arcsecant of this complex number.
CASecReal | Returns the complex arcsecant of a real number.
CASin | Returns the complex arcsine of this complex number.
CASinH | Returns the complex hyperbolic arcsine of this complex number.
CASinReal | Returns the complex arcsine of a real number.
CATan | Returns the complex arctangent of this complex number.
CATanH | Returns the complex hyperbolic arctangent of this complex number.
CATanHReal | Returns the complex hyperbolic arctangent of a real number.
CConj | Returns the complex conjugate of this complex number.
CConjugate | Returns the complex conjugate of this complex number.
CCos | Returns the complex cosine of this complex number.
CCosH | Returns the complex hyperbolic cosine of this complex number.
CCot | Returns the complex cotangent of this complex number.
CCotH | Returns the complex hyperbolic cotangent of this complex number.
CCsc | Returns the complex cosecant of this complex number.
CCscH | Returns the complex hyperbolic cosecant of this complex number.
CDiv | Divides by a complex number.
CDivImag | Divides by an imaginary number.
CDivReal | Divides by a real number.
CExp | Returns the complex exponential of this complex number.
CImag | Gets/sets the imaginary part of a complex number.
CInverse | Returns the inverse, or reciprocal, of a complex number.
CLog | Returns the complex natural logarithm (base e) of this complex number.
CLog10 | Returns the complex base-10 logarithm of this complex number.
CLogAbs | Returns the natural logarithm of the magnitude of a complex number.
CMagnitude | Returns the magnitude of this complex number.
CMod | Returns the modulus of a complex number.
CModulus | Returns the modulus of a complex number.
CMul | Multiplies by a complex number.
CMulImag | Multiplies by an imaginary number.
CMulReal | Multiplies by a real number.
CNeg | Negates the complex number.
CNegate | Negates the complex number.
CNegative | Negates the complex number.
CNorm | Returns the squared magnitude of this complex number, otherwise known as the complex norm.
CNthRoot | Returns the kth nth root of a complex number where k = 0, 1, 2, 3,...,n - 1.
CPhase | Returns the argument of this complex number.
CPolar | Sets the complex number from the polar representation.
CPow | Returns this complex number raised to a complex power or to a real number.
CReal | Gets/sets the real part of a complex number.
CRect | Uses the cartesian components (x,y) to set the real and imaginary parts of the complex number.
CReciprocal | Returns the inverse, or reciprocal, of a complex number.
CSec | Returns the complex secant of this complex number.
CSecH | Returns the complex hyperbolic secant of this complex number.
CSet | Uses the cartesian components (x,y) to set the real and imaginary parts of the complex number.
CSgn | Returns the sign of this complex number.
CSin | Returns the complex sine of this complex number.
CSinH | Returns the complex hyperbolic sine of this complex number.
CSqr | Returns the square root of a complex number.
CSqrt | Returns the square root of a complex number.
CSub | Subtracts a complex number.
CSubImag | Subtracts an imaginary number.
CSubReal | Subtracts a real number.
CSwap | Exchanges the contents of two complex numbers.
CTan | Returns the complex tangent of this complex number.
CTanH | Returns the complex hyperbolic tangent of this complex number.

### Helper Methods

Name | Description
--- | ---
ArcCosH | Calculates the inverse hyperbolic cosine.
ArcTanH | Returns the inverse hyperbolic tangent of a number.
IsInf | Determines whether the argument is an infinity.
IsInfinity | Determines whether the argument is an infinity.

# Operator LET (=)

Assigns a value to a CComplex variable.

    OPERATOR LET (BYREF z AS CComplex)
    OPERATOR LET (BYREF z AS _complex)

Parameter | Description
--- | ---
z | An instance of the CComplex class or a _complex structure.

An instance of the CComplex class.

    DIM cpx AS CComplex = TYPE(3, 4)
    DIM cpx2 AS CComplex = cpx

    DIM cpx AS CComplex
    cpx = CComplex(3, 4)

A _complex structure.

    DIM cpx AS CComplex = TYPE<_complex>(3, 4)

# Operator CAST

Returns the underlying _complex number.

    OPERATOR CAST () AS _complex
    OPERATOR CAST () AS STRING

#### Remarks

This overloaded operator is not called directly.

The second overloaded operator returns the complex number as a formatted string that can be used with the PRINT statement.

# Comparison operators

Compares complex numbers for equality or inequality.

    OPERATOR = (BYREF z1 AS CComplex, BYREF z2 AS CComplex) AS BOOLEAN
    OPERATOR <> (BYREF z1 AS CComplex, BYREF z2 AS CComplex) AS BOOLEAN

#### Exammple

    DIM cpx1 AS CComplex = CComplex(1, 2)
    DIM cpx2 AS CComplex = CComplex(3, 4)
    IF cpx1 = cpx2 THEN PRINT "equal" ELSE PRINT "different"

# Math operators

    OPERATOR + (BYREF z1 AS CComplex, BYREF z2 AS CComplex) AS CComplex
    OPERATOR + (BYVAL a AS DOUBLE, BYREF z AS CComplex) AS CComplex
    OPERATOR + (BYREF z AS CComplex, BYVAL a AS DOUBLE) AS CComplex
    OPERATOR - (BYREF z1 AS CComplex, BYREF z2 AS CComplex) AS CComplex
    OPERATOR - (BYVAL a AS DOUBLE, BYREF z AS CComplex) AS CComplex
    OPERATOR - (BYREF z AS CComplex, BYVAL a AS DOUBLE) AS CComplex
    OPERATOR * (BYREF z1 AS CComplex, BYREF z2 AS CComplex) AS CComplex
    OPERATOR * (BYVAL a AS DOUBLE, BYREF z AS CComplex) AS CComplex
    OPERATOR * (BYREF z AS CComplex, BYVAL a AS DOUBLE) AS CComplex
    OPERATOR / (BYREF leftside AS CComplex, BYREF rightside AS CComplex) AS CComplex
    OPERATOR / (BYVAL a AS DOUBLE, BYREF z AS CComplex) AS CComplex
    OPERATOR / (BYREF z AS CComplex, BYVAL a AS DOUBLE) AS CComplex
    OPERATOR += (BYREF z AS CComplex)
    OPERATOR -= (BYREF z AS CComplex)
    OPERATOR *= (BYREF z AS CComplex)
    OPERATOR /= (BYREF z AS CComplex)
    OPERATOR - (BYREF z AS CComplex, BYVAL a AS DOUBLE) AS CComplex
    OPERATOR ^ (BYREF value AS CComplex, BYREF power AS CComplex) AS CComplex
    OPERATOR ^ (BYREF value AS CComplex, BYVAL power AS DOUBLE) AS CComplex

#### Examples

    DIM cpx1 AS CComplex = CComplex(3, 4)
    DIM cpx2 AS CComplex(5, 6)
    cpx2 = cpx1 + cpx2

    DIM cpx1 AS CComplex = CComplex(3, 4)
    DIM cpx2 AS CComplex = CComplex(5, 6)
    cpx2 = cpx1 + 11

    DIM cpx1 AS CComplex = CComplex(3, 4)
    DIM cpx2 AS CComplex = CComplex(5, 6)
    cpx2 = 11 + cpx1

    DIM cpx1 AS CComplex = CComplex(3, 4)
    DIM cpx2 AS CComplex = CComplex(5, 6)
    cpx2 = cpx1 - cpx2

    DIM cpx1 AS CComplex = CComplex(3, 4)
    DIM cpx2 AS CComplex
    cpx2 = cpx1 - 11

    DIM cpx1 AS CComplex = CComplex(3, 4)
    DIM cpx2 AS CComplex
    cpx2 = 11 - cpx1

    DIM cpx1 AS CComplex = CComplex(3, 4)
    DIM cpx2 AS CComplex = CComplex(5, 6)
    cpx2 = cpx1 * cpx2

    DIM cpx1 AS CComplex = CComplex(3, 4)
    DIM cpx2 AS CComplex
    cpx2 = cpx1 * 11

    DIM cpx1 AS CComplex = CComplex(3, 4)
    DIM cpx2 AS CComplex
    cpx2 = 11 * cpx1

    DIM cpx1 AS CComplex = CComplex(5, 6)
    DIM cpx2 AS CComplex = CComplex(2, 3)
    cpx2 = cpx1 / cpx2

    DIM cpx1 AS CComplex = CComplex(5, 6)
    DIM cpx2 AS CComplex
    cpx2 = cpx1 / 11

    DIM cpx1 AS CComplex = CComplex(5, 6)
    DIM cpx2 AS CComplex
    cpx2 = 11 / cpx1

    DIM cpx1 AS CComplex = CComplex(3, 4)
    DIM cpx2 AS CComplex = CComplex(5, 6)
    cpx1 += cpx2

    DIM cpx1 AS CComplex = CComplex(3, 4)
    DIM cpx2 AS CComplex = CComplex(5, 6)
    cpx2 -= cpx1

    DIM cpx1 AS CComplex = CComplex(3, 4)
    DIM cpx2 AS CComplex = CComplex(5, 6)
    cpx1 *= cpx2

    DIM cpx1 AS CComplex = CComplex(3, 4)
    DIM cpx2 AS CComplex = CComplex(5, 6)
    cpx2 /= cpx1

    DIM cpx1 AS CComplex = CComplex(3, 4)
    DIM cpx2 AS CComplex = -cpx1

# CAbs / CMagnitude

Returns the magnitude of this complex number.

    FUNCTION CAbs () AS DOUBLE
    FUNCTION CMagnitude () AS DOUBLE

#### Example

    DIM cpx AS CComplex = CComplex(2, 3)
    PRINT cpx.CAbs
    Output: 3.60555127546399

# CAbs2 / CNorm

Returns the squared magnitude of this complex number, otherwise known as the complex norm.

    FUNCTION CAbs2 () AS DOUBLE
    FUNCTION CNorm () AS DOUBLE

#### Example

    DIM cpx AS CComplex = CComplex(2, 3)
    PRINT cpx.CAbs2
    Output: 13

# CAbsSqr

Returns the absolute square (squared norm) of a complex number.

    FUNCTION CAbsSqr () AS DOUBLE

#### Example

    DIM cpx AS CComplex = CComplex(1.2345, -2.3456)
    print cpx.CAbsSqr
    Output: 7.025829610000001

# CAdd

Adds a complex number.

    FUNCTION CAdd (BYREF z AS CComplex) AS CComplex
    FUNCTION CAdd (BYVAL x AS DOUBLE, BYVAL y AS DOUBLE) AS CComplex

Parameter | Description
--- | ---
z | The complex number to add.
x, y | Double values representing the real and imaginary parts.

#### Examples

    DIM cpx AS CComplex = CComplex(5, 6)
    DIM cpx2 AS CComplex = CComplex(2, 3)
    cpx = cpx.CAdd(cpx2)
    ' --or-- cpx = cpx.CAdd(CComplex(2, 3))

    DIM cpx AS CComplex = CComplex(5, 6) : cpx = cpx.CAdd(2, 3)

# CAddImag

Adds an imaginary number.

    FUNCTION CAddImag (BYVAL x AS DOUBLE) AS CComplex

Parameter | Description
--- | ---
y | A double value.

#### Example

    DIM cpx AS CComplex = CComplex(5, 6)
    cpx = cpx.CAddImag(10)

# CAddReal

Adds a real number.

    FUNCTION CAddReal (BYVAL x AS DOUBLE) AS CComplex

Parameter | Description
--- | ---
x | A double value.

#### Example

    DIM cpx AS CComplex = CComplex(5, 6)
    cpx = cpx.CAddReal(10)

# CArcCos / CACos

Returns the complex arccosine of this complex number.

    FUNCTION CArcCos () AS CComplex
    FUNCTION CACos () AS CComplex

#### Example

    DIM cpx AS CComplex = CComplex(1, 1)
    print cpx.CArcCos(z)
    Output: 0.9045568943023814 -1.061275061905036 * i

# CArcCosH / CACosH

Returns the complex hyperbolic arccosine of this complex number. The branch cut is on the real axis, less than 1.

    FUNCTION CArcCosH () AS CComplex
    FUNCTION CACosH () AS CComplex

#### Example

    DIM cpx AS CComplex = CComplex(1, 1)
    print cpx.CArcCosH
    Output: 1.061275061905036 +0.9045568943023813 * i

# CArcCosHReal / CACosHReal

Returns the complex hyperbolic arccosine of a real number.

    FUNCTION CArcCosHReal (BYVAL value AS DOUBLE) AS CComplex
    FUNCTION CACosHReal (BYVAL value AS DOUBLE) AS CComplex

Parameter | Description
--- | ---
value | A double value representing the real part of a complex number.

# CArcCosReal / CACosReal

Returns the complex arccosine of a real number.
For a between -1 and 1, the function returns a real value in the range [0, pi].
For a less than -1 the result has a real part of pi and a negative imaginary part.
For a greater than 1 the result is purely imaginary and positive.

    FUNCTION CArcCosReal (BYVAL value AS DOUBLE) AS CComplex
    FUNCTION CACosReal (BYVAL value AS DOUBLE) AS CComplex

Parameter | Description
--- | ---
value | A double value representing the real part of a complex number.

#### Example

    DIM cpx AS CComplex
    print cpx.CArcCosReal(1) ' = 0 0 * i
    print cpx.CArcCosReal(-1) ' = 3.141592653589793 0 * i
    print cpx.CArcCosReal(2) ' = 0 +1.316957896924817 * i

# CArcCot / CACot

Returns the complex arccotangent of this complex number.

    FUNCTION CArcCot () AS CComplex
    FUNCTION CACot () AS CComplex

#### Example

    DIM cpx AS CComplex = CComplex(1, 1)
    print cpx.CArcCot
    Output: 0.5535743588970452 -0.4023594781085251 * i

# CArcCotH / CACotH

Returns the complex hyperbolic arccotangent of this complex number.

    FUNCTION CArcCotH () AS CComplex
    FUNCTION CACotH () AS CComplex

#### Example

    DIM cpx AS CComplex = CComplex(1, 1)
    PRINT cpx.CArcCotH
    Output: 0.4023594781085251 -0.5535743588970452 * i

# CArcCsc / CACsc

Returns the complex arccosecant of this complex number.

    FUNCTION CArcCsc () AS CComplex
    FUNCTION CACsc () AS CComplex

#### Example

    DIM cpx AS CComplex = CComplex(1, 1)
    print cpx.CArcCsc
    Output: 0.4522784471511907 -0.5306375309525178 * i

# CArcCscH / CACscH

Returns the complex hyperbolic arccosecant of this complex number.

    FUNCTION CArcCscH () AS CComplex
    FUNCTION CACscH () AS CComplex

#### Example

    DIM cpx AS CComplex = CComplex(1, 1)
    PRINT cpx.CArcCscH
    Output: 0.5306375309525179 -0.4522784471511906 * i

# CArcCscReal / CACscReal

Returns the complex arccosecant of a real number.

    FUNCTION CArcCscReal (BYVAL value AS DOUBLE) AS CComplex
    FUNCTION CACscReal (BYVAL value AS DOUBLE) AS CComplex

#### Example

    DIM cpx AS CComplex
    print cpx.CArcCscReal(1)
    Output: 1.570796326794897 0 * i

# CArcSec / CASec

Returns the complex arcsecant of this complex number.

    FUNCTION CArcSec () AS CComplex
    FUNCTION CASec () AS CComplex

#### Example

    DIM cpx AS CComplex = CComplex(1, 1)
    print cpx.CArcSec
    Output: 1.118517879643706 +0.5306375309525176 * i

# CArcSecH / CASecH

Returns the complex hyperbolic arcsecant of this complex number.

    FUNCTION CArcSecH () AS CComplex
    FUNCTION CASecH () AS CComplex

#### Example

    DIM cpx AS CComplex = CComplex(1, 1)
    PRINT cpx.CArcSecH
    Output: 0.5306375309525178 -1.118517879643706 * i

# CArcSecReal / CASecReal

Returns the complex arcsecant of a real number.

    FUNCTION CArcSecReal (BYVAL value AS DOUBLE) AS CComplex
    FUNCTION CASecReal (BYVAL value AS DOUBLE) AS CComplex

Parameter | Description
--- | ---
value | A double value representing the real part of a complex number.

#### Example

    DIM cpx AS CComplex
    print cpx.CArcSecReal(1.1)
    Output: 0.4296996661514246 0 * i

# CArcSin / CASin

Returns the complex arcsine of this complex number. The branch cuts are on the real axis, less than -1 and greater than 1.

    FUNCTION CArcSin () AS CComplex
    FUNCTION CASin () AS CComplex

#### Example

    DIM cpx AS CComplex
    PRINT cpx.CArcSin(1, 1)
    Output: 0.6662394324925152 +1.061275061905036 * i

# CArcSinH / CASinH

Returns the complex hyperbolic arcsine of this complex number. The branch cuts are on the imaginary axis, below -i and above i.

    FUNCTION CArcSinH () AS CComplex
    FUNCTION CASinH () AS CComplex

#### Example

    DIM cpx AS CComplex = CComplex(1, 1)
    PRINT cpx.CArcSinH
    Output: 1.061275061905036 +0.6662394324925153 * i

# CArcSinReal / CASinReal

Returns the complex arcsine of a real number.
For a between -1 and 1, the function returns a real value in the range [-pi/2, pi/2].
For a less than -1 the result has a real part of -pi/2 and a positive imaginary part.
For a greater than 1 the result has a real part of pi/2 and a negative imaginary part.

    FUNCTION CArcSinReal (BYVAL value AS DOUBLE) AS CComplex
    FUNCTION CASinReal (BYVAL value AS DOUBLE) AS CComplex

Parameter | Description
--- | ---
value | A double value representing the real part of a complex number.

#### Example

    DIM cpx AS CComplex
    PRINT cpx.CArcSinReal(1)
    Output: 1.570796326794897 +0 * i

# CArcTan / CATan

Returns the complex arctangent of this complex number. The branch cuts are on the imaginary axis, below -i and above i.

    FUNCTION CArcTan () AS CComplex
    FUNCTION CATan () AS CComplex

#### Example

    DIM cpx AS CComplex
    PRINT cpx.CArcTan(1, 1)
    Output: 1.017221967897851 +0.4023594781085251 * i

# CArcTanH / CATanH

Returns the complex hyperbolic arctangent of this complex number. The branch cuts are on the real axis, less than -1 and greater than 1.

    FUNCTION CArcTanH () AS CComplex
    FUNCTION CATanH () AS CComplex

#### Example

    DIM cpx AS CComplex = CComplex(1, 1)
    PRINT cpx.CArcTanH
    Output: 0.4023594781085251 +1.017221967897851 * i

# CArcTanHReal / CATanHReal

Returns the complex hyperbolic arctangent of a real number.

    FUNCTION CArcTanHReal (BYVAL value AS DOUBLE) AS CComplex
    FUNCTION CATanHReal (BYVAL value AS DOUBLE) AS CComplex

Parameter | Description
--- | ---
value | A double value representing the real part of a complex number.

# CArg / CArgument / CPhase

Returns the argument of this complex number.

    FUNCTION CArg () AS DOUBLE
    FUNCTION CArgument () AS DOUBLE
    FUNCTION CPhase () AS DOUBLE

#### Example

    DIM cpx AS CComplex = CComplex(1, 0)
    PRINT cpx.CArg
    Output: 0.0

    DIM cpx AS CComplex = CComplex(0, 1)
    PRINT cpx.CArg
    Output: 1.570796326794897

    DIM cpx AS CComplex = CComplex(0, -1)
    PRINT cpx.CArg
    Output: -1.570796326794897

    DIM cpx AS CComplex = CComplex(-1, 0)
    PRINT cpx.CArg
    Output: 3.141592653589793

# CConjugate / CConj

Returns the complex conjugate of this complex number.

    FUNCTION CConjugate () AS CComplex
    FUNCTION CConj () AS CComplex

#### Example

    DIM cpx AS CComplex = CComplex(5, 6)
    cpx = cpx.CConjugate

# CCos

Returns the complex cosine of this complex number.

    FUNCTION CCos () AS CComplex

#### Example

    DIM cpx AS CComplex = CComplex(1, 1)
    PRINT cpx.CCos
    Output: 0.8337300251311491 -0.9888977057628651 * i

# CCosH

Returns the complex hyperbolic cosine of this complex number.

    FUNCTION CCosH () AS CComplex

#### Example

    DIM cpx AS CComplex = CComplex(1, 1)
    PRINT cpx.CCosH
    Output: 0.8337300251311491 +0.9888977057628651 * i

# CCot

Returns the complex cotangent of this complex number.

    FUNCTION CCot () AS CComplex

#### Example

    DIM cpx AS CComplex = CComplex(1, 1)
    PRINT cpx.CCot
    Output: 0.2176215618544027 -0.8680141428959249 * i

# CCotH

Returns the complex hyperbolic cotangent of this complex number.

    FUNCTION CCotH () AS CComplex

#### Example

    DIM cpx AS CComplex = CComplex(1, 1)
    PRINT cpx.CCotH
    Output: 0.8680141428959249 -0.2176215618544029 * i

# CCsc

Returns the complex cosecant of this complex number.

    FUNCTION CCsc () AS CComplex

#### Example

    DIM cpx AS CComplex = CComplex(1, 1)
    PRINT cpx.CCsc
    Output: 0.6215180171704285 -0.3039310016284265 * i

# CCscH

Returns the complex hyperbolic cosecant of this complex number.

    FUNCTION CCscH () AS CComplex

#### Example

    DIM cpx AS CComplex = CComplex(1, 1)
    PRINT cpx.CCscH
    Output: 0.3039310016284265 -0.6215180171704285 * i

# CDiv

Divides by a complex number.
Divides by a real and an imaginary number.

    FUNCTION CDiv (BYREF z AS CComplex) AS CComplex
    FUNCTION CDiv (BYVAL x AS DOUBLE, BYVAL y AS DOUBLE) AS CComplex

Parameter | Description
--- | ---
z | A complex number.
x, y | Double values representing the real and imaginary parts.

#### Example

    DIM cpx AS CComplex = CComplex(5, 6)
    DIM cpx2 AS CComplex = CComplex(2, 3)
    cpx = cpx.CDiv(cpx2)
    ' --or-- cpx = cpx.CDiv(CComplex(2, 3))

    DIM cpx AS CComplex = CComplex(5, 6)
    cpx = cpx.CDiv(2, 3)

# CDivImag

Divides by an imaginary number.

    FUNCTION CDivImag (BYVAL y AS DOUBLE) AS CComplex

Parameter | Description
--- | ---
y | A double value.

#### Example

    DIM cpx AS CComplex = CComplex(5, 6)
    cpx = cpx.CDivImag(10)

# CDivReal

Divides by a real number.

    FUNCTION CDivReal (BYVAL x AS DOUBLE) AS CComplex

Parameter | Description
--- | ---
x | A double value.

#### Example

    DIM cpx AS CComplex = CComplex(5, 6)
    cpx = cpx.CDivReal(10)

# CExp

Returns the complex exponential of this complex number.

    FUNCTION CExp () AS CComplex

#### Example

    DIM cpx AS CComplex = CComplex(1, 1)
    PRINT cpx.CExp
    Output: 1.468693939915885 +2.287355287178842 * i

# CImag

Gets/sets the imaginary part of a complex number.

    PROPERTY CImag () AS DOUBLE
    PROPERTY CImag (BYVAL x AS DOUBLE)

Parameter | Description
--- | ---
x | A double value.

#### Example

    DIM cpx AS CComplex : cpx.CImag = 4
    DIM d AS DOUBLE = cpx.CImag

# CLog

Returns the complex natural logarithm (base e) of this complex number. The branch cut is the negative real axis.

    FUNCTION CLog () AS CComplex
    FUNcTION CLog (BYVAL baseValue AS DOUBLE) AS CComplex

Parameter | Description
--- | ---
baseValue | A double value.

#### Examples

    DIM cpx AS CComplex = CComplex(1, 1)
    PRINT cpx.CLog
    Output: 0.3465735902799727 +0.7853981633974483 * i

    DIM cpx AS CComplex = CComplex(0, 0)
    PRINT cpx.CLog
    Output: -1.#INF

    DIM cpx AS CComplex = CComplex(1, 1)
    PRINT cpx.CLog(10)
    Output: 0.1505149978319906 +0.3410940884604603 * i

# CLog10

Returns the complex base-10 logarithm of this complex number.

    FUNCTION CLog10 () AS CComplex

#### Example

    DIM cpx AS CComplex = CComplex(1, 1)
    PRINT cpx.CLog10
    Output: 0.1505149978319906 +0.3410940884604603 * i

# CLogAbs

Returns the natural logarithm of the magnitude of the complex number z, log|z|. It allows an accurate evaluation of \log|z| when |z| is close to one. The direct evaluation of log(CAbs(z)) would lead to a loss of precision in this case.

    FUNCTION CLogAbs () AS DOUBLE

#### Example

    DIM cpx AS CComplex = CComplex(1.1, 0.1)
    PRINT cpx.CLogAbs
    Output: 0.09942542937258279

# CModulus / CMod

Returns the modulus of a complex number.

    FUNCTION CModulus () AS DOUBLE
    FUNCTION CMod () AS DOUBLE

#### Example

    DIM cpx AS CComplex = CComplex(2.3, -4.5)
    print cpx.CModulus
    Output: 5.053711507397311

# CMul

Multiplies by a complex number.
Multiplies by a real and an imaginary number.

    FUNCTION CMul (BYREF z AS CComplex) AS CComplex
    FUNCTION CMul (BYVAL x AS DOUBLE, BYVAL y AS DOUBLE) AS CComplex

Parameter | Description
--- | ---
z | A complex number.
x, y | Double values representing the real and imaginary parts.

#### Examples

    DIM cpx AS CComplex = CComplex(5, 6)
    DIM cpx2 AS CComplex = CComplex(2, 3)
    cpx = cpx.CMul(cpx2)
    ' --or-- cpx = cpx.CMul(CComplex(2, 3))

    DIM cpx AS CComplex = CComplex(5, 6)
    cpx = cpx.CMul(2, 3)

# CMulImag

Multiplies by an imaginary number.

    FUNCTION CMulImag (BYVAL y AS DOUBLE) AS CComplex

Parameter | Description
--- | ---
y | A double value.

#### Example

    DIM cpx AS CComplex = CComplex(5, 6)
    cx = cpx.CMulImag(3)

# CMulReal

Multiplies by a real number.

    FUNCTION CMulReal (BYVAL x AS DOUBLE) AS CComplex

Parameter | Description
--- | ---
x | A double value.

#### Example

    DIM cpx AS CComplex = CComplex(5, 6)
    cpx = cpx.CMulReal(2)

# CNegate / CNeg / CNegative

Negates the complex number.

    FUNCTION CNeg (BYREF z AS _complex) AS _complex
    FUNCTION CNegate (BYREF z AS _complex) AS _complex
    FUNCTION CNegative (BYREF z AS _complex) AS _complex

# CNthRoot

Returns the kth nth root of a complex number where k = 0, 1, 2, 3,...,n - 1.
De Moivre's formula states that for any complex number x and integer n it holds that
cos(x)+ isin(x))^n = cos(nx) + isin(nx)
where i is the imaginary unit (i2 = -1).
Since z = re^(it) = r * (cos(t) + i sin(t))
where
z = (a, ib)
r = modulus of z
t = argument of z
i = sqrt(-1.0)
we can calculate the nth root of z by the formula:
z^(1/n) = r^(1/n) * (cos(x/n) + i sin(x/n))
by using log division.

    FUNCTION CNthRoot (BYVAL n AS LONG, BYVAL k AS LONG = 0) AS _complex

#### Example

    DIM cpx AS CComplex = CComplex(2.3, -4.5)
    DIM n AS LONG = 5
    FOR i AS LONG = 0 TO n - 1
       print CStr(cpx.CNthRoot(n, i))
    NEXT
    Output:
     1.349457704883236  -0.3012830564679053 * i
     0.7035425781022545 +1.190308959128094 * i
    -0.9146444790833151 +1.036934450322577 * i
    -1.268823953798186  -0.5494482247230521 * i
     0.1304681498960107 -1.376512128259714 * i

# CPolar

Sets the complex number from the polar representation.

    FUNCTION CPolar (BYVAL r AS DOUBLE, BYVAL theta AS DOUBLE)

Parameter | Description
--- | ---
r | The modulus of complex number.
theta | The angle with the positive direction of x-axis.

# CPow

Returns this complex number raised to a complex power.
Returns this complex number raised to a real number.

    FUNCTION CPow (BYREF power AS CComplex) AS CComplex
    FUNCTION CPow (BYVAL power AS DOUBLE) AS CComplex

Parameter | Description
--- | ---
power | A complex or a double number.

#### Examples

    DIM cpx AS CComplex = CComplex(1, 1)
    DIM b AS CComplex = CComplex(2, 2)
    PRINT cpx.CPow(b)
    Output: -0.2656539988492412 +0.3198181138561362 * i

    DIM cpx AS CComplex = CComplex(1, 1)
    PRINT cpx.CPow(2)
    Output: 1.224606353822378e-016 +2 * i

# CReal

Gets/sets the real part of a complex number.

    PROPERTY CReal () AS DOUBLE
    PROPERTY CReal (BYVAL x AS DOUBLE)

Parameter | Description
--- | ---
x | A double value.

#### Example

    DIM cpx AS CComplex : cpx.CReal = 3
    DIM d AS DOUBLE = cpx.CReal

# CReciprocal / CInverse

Returns the inverse, or reciprocal, of a complex number.

    FUNCTION CReciprocal () AS CComplex
    FUNCTION CInverse () AS CComplex

Parameter | Description
--- | ---
x | A double value.

#### Example

    DIM cpx AS CComplex = CComplex(1, 1)
    Print cpx.CReciprocal
    Output: 0.5 -0.5 * i

# CSec

Returns the complex secant of this complex number.

    FUNCTION CSec () AS CComplex

#### Example

    DIM cpx AS CComplex = CComplex(1, 1)
    PRINT cpx.CSec
    Output: 0.4983370305551869 +0.591083841721045 * i

# CSecH

Returns the complex hyperbolic secant of this complex number.

    FUNCTION CSecH () AS CComplex

#### Example

    DIM cpx AS CComplex = CComplex(1, 1)
    PRINT cpx.CSecH
    Output: 0.4983370305551869 -0.591083841721045 * i

# CSet / CRect

Uses the cartesian components (x,y) to set the real and imaginary parts of the complex number.

    PROPERTY CSet (BYVAL x AS DOUBLE, BYVAL y AS DOUBLE)
    PROPERTY CRect (BYVAL x AS DOUBLE, BYVAL y AS DOUBLE)

Parameter | Description
--- | ---
x, y | Double values.

#### Example

    DIM cpx AS CComplex : cpx.CSet = 3, 4
    DIM cpx AS CComplex : cpx.CRect = 3, 4

# CSgn

Returns the sign of this complex number.
If number is greater than zero, then CSgn returns 1.
If number is equal to zero, then CSgn returns 0.
If number is less than zero, then CSgn returns -1.

    PROPERTY CSgn () AS LONG

# CSin

Returns the complex sine of this complex number.

    PROPERTY CSin () AS CSin

#### Example

    DIM cpx AS CComplex = CComplex(1, 1)
    PRINT cpx.CSin
    Output: 1.298457581415977 +0.6349639147847361 * i

# CSinH

Returns the complex hyperbolic sine of this complex number.

    FUNCTION CSinH () AS CComplex

#### Example

    DIM cpx AS CComplex = CComplex(1, 1)
    PRINT cpx.CSinH
    Output: 0.6349639147847361 +1.298457581415977 * i

# CSqr / CSqrt

Returns the square root of the complex number z. The branch cut is the negative real axis. The result always lies in the right half of the complex plane.

    FUNCTION CSqr () AS CComplex
    FUNCTION CSqrt () AS CComplex

Returns the complex square root of the real number x, where x may be negative.

    FUNCTION CSqr (BYVAL value AS DOUBLE) AS CComplex
    FUNCTION CSqrt (BYVAL value AS DOUBLE) AS CComplex

Parameter | Description
--- | ---
value | A double value representing a real number.

#### Examples

    DIM cpx AS CComplex = CComplex(2, 3)
    PRINT cpx.CSqrt
    Output: 1.67414922803554 +0.895977476129838 * i

Compute the square root of -1:

    DIM cpx AS CComplex = CComplex(-1)
    PRINT cpx.CSqr
    Output: 0 +1.0 * i

# CSub

Subtracts a complex number.

    FUNCTION CSub (BYREF z AS CComplex) AS CComplex
    FUNCTION CSub (BYVAL x AS DOUBLE, BYVAL y AS DOUBLE) AS CComplex

Parameter | Description
--- | ---
z | The complex number to subtract.
x, y | Double values representing the real and imaginary parts.

#### Examples

    DIM cpx AS CComplex = CComplex(5, 6)
    DIM cpx2 AS CComplex = CComplex(2, 3)
    cpx = cpx.CSub(cpx2)
    ' --or-- cpx = cpx.CSub(CComplex(2, 3))

    DIM cpx AS CComplex = CComplex(5, 6)
    cpx = cpx.CSub(2, 3)

# CSubImag

Subtracts an imaginary number.

    FUNCTION CSubImag (BYVAL y AS DOUBLE) AS CComplex

Parameter | Description
--- | ---
y | A double value.

#### Example

    DIM cpx AS CComplex = CComplex(5, 6)
    cx = cpx.CSubImag(3)

# CSubReal

Subtracts a real number.

    FUNCTION CSubReal (BYVAL x AS DOUBLE) AS CComplex

Parameter | Description
--- | ---
x | A double value.

#### Example

    DIM cpx AS CComplex = CComplex(5, 6)
    cpx = cpx.CSubReal(2)

# CSwap

Exchanges the contents of two complex numbers.

    SUB CSwap (BYREF z AS CComplex)

Parameter | Description
--- | ---
z | The complex number to swap.

# CTan

Returns the complex tangent of this complex number.

    FUNCTION CTan () AS CComplex

#### Example

    DIM cpx AS CComplex = CComplex(1, 1)
    PRINT cpx.CTan
    Output: 0.2717525853195117 +1.083923327338695 * i

# CTanH

Returns the complex hyperbolic tangent of this complex number.

    FUNCTION CTanH () AS CComplex

#### Example

    DIM cpx AS CComplex = CComplex(1, 1)
    PRINT cpx.CTanH
    Output: 1.083923327338695 +0.2717525853195119 * i

# ArcCosH

Calculates the inverse hyperbolic cosine.

    FUNCTION ArcCosH (BYVAL x AS DOUBLE) AS DOUBLE

Parameter | Description
--- | ---
x | A double value.

#### Example

    DIM AS double pi = 3.1415926535
    DIM AS double x, y
    DIM cpx AS CComplex
    x = cosh(pi / 4)
    y = cpx.ArcCosH(x)
    print "cosh = ", pi/4, x
    print "ArcCosH = ", x, y

    Output:
    cosh =  0.785398163375      1.324609089232506
    acosh = 1.324609089232506   0.7853981633749999

# ArcTanH

Returns the inverse hyperbolic tangent of a number.

    FUNCTION ArcTanH (BYVAL x AS DOUBLE) AS DOUBLE

Parameter | Description
--- | ---
x | A double value.

#### Example

    DIM cpx AS CComplex
    print cpx.ArcTanh(0.76159416)
    Output: 1.00000000962972

    print cpx.ArcTanH(-0.1)
    Output: -0.1003353477310756

# IsInfinity / IsInf

Determines whether the argument is an infinity.

    FUNCTION IsInfinity (BYVAL x AS DOUBLE) AS LONG
    FUNCTION IsInf (BYVAL x AS DOUBLE) AS LONG

Parameter | Description
--- | ---
x | A double value.

#### Remarks

Returns +1 if x is positive infinity, -1 if x is negative infinity and 0 otherwise.