# Complex Numbers Procedures

Procedures to work with complex numbers. Complex numbers are represented using the type `_complex`. The real and imaginary part are stored in the members `x` and `y`.

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

Include file: AfxNova/AfxComplex.inc.

### Operators

Name | Description
--- | ---
Comparison operators | Compares complex numbers.
Math operators | Add, subtract, multiply or divide complex numbers.

### Methods and Properties

Name | Description
--- | ---
CAbs | Returns the magnitude of a complex number.
CAbs2 | Returns the squared magnitude of a 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 a complex number.
CACosH | Returns the complex hyperbolic arccosine of a complex number. The branch cut is on the real axis, less than 1.
CACosHReal | Returns the complex arccosine of a complex number.
CACosReal | Returns the complex arccosine of a real number.
CACot | Returns the complex arccotangent of a complex number.
CACotH | Returns the complex hyperbolic arccotangent of a complex number.
CACsc | Returns the complex arccosecant of a complex number.
CACscH | Returns the complex hyperbolic arccosecant of a complex number.
CACscReal | Returns the complex arccosecant of a real number.
CAddImag | Adds an imaginary number.
CAddReal | Adds a real number.
CArcCos | Returns the complex arccosine of a complex number.
CArcCosH | Returns the complex hyperbolic arccosine of a complex number.
CArcCosHReal | Returns the complex arccosine of a complex number.
CArcCosReal | Returns the complex arccosine of a real number.
CArcCot | Returns the complex arccotangent of a complex number.
CArcCotH | Returns the complex hyperbolic arccotangent of a complex number.
CArcCsc | Returns the complex arccosecant of a complex number.
CArcCscH | Returns the complex hyperbolic arccosecant of a complex number.
CArcCscReal | Returns the complex arccosecant of a real number.
CArcSec | Returns the complex arcsecant of a complex number.
CArcSecH | Returns the complex hyperbolic arcsecant of a complex number.
CArcSecReal | Returns the complex arcsecant of a real number.
CArcSin | Returns the complex arcsine of a complex number.
CArcSinH | Returns the complex hyperbolic arcsine of a complex number.
CArcSinReal | Returns the complex arcsine of a real number.
CArcTan | Returns the complex arctangent of a complex number.
CArcTanH | Returns the complex hyperbolic arctangent of a complex number.
CArcTanHReal | Returns the complex hyperbolic arctangent of a real number.
CArg | Returns the argument of a complex number.
CArgument | Returns the argument of a complex number.
CASec | Returns the complex arcsecant of a complex number.
CASecH | Returns the complex hyperbolic arcsecant of a complex number.
CASecReal | Returns the complex arcsecant of a real number.
CASin | Returns the complex arcsine of a complex number.
CASinH | Returns the complex hyperbolic arcsine of a complex number.
CASinReal | Returns the complex arcsine of a real number.
CATan | Returns the complex arctangent of a complex number.
CATanH | Returns the complex hyperbolic arctangent of a complex number.
CATanHReal | Returns the complex hyperbolic arctangent of a real number.
CConj | Returns the complex conjugate of a complex number.
CConjugate | Returns the complex conjugate of a complex number.
CCos | Returns the complex cosine of a complex number.
CCosH | Returns the complex hyperbolic cosine of a complex number.
CCot | Returns the complex cotangent of a complex number.
CCotH | Returns the complex hyperbolic cotangent of a complex number.
CCsc | Returns the complex cosecant of this complex number.
CCscH | Returns the complex hyperbolic cosecant of a complex number.
CDivImag | Divides by an imaginary number.
CDivReal | Divides by a real number.
CExp | Returns the complex exponential of this complex number.
CGetImag | Returns the imaginary part of a complex number.
CGetReal | Returns the real 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 a complex number.
CLogAbs | Returns the natural logarithm of the magnitude of a complex number.
CMagnitude | Returns the magnitude of a complex number.
CMod | Returns the modulus of a complex number.
CModulus | Returns the modulus of a complex number.
CMulImag | Multiplies by an imaginary number.
CMulReal | Multiplies by a real number.
CNeg | Negates a complex number.
CNegate | Negates a complex number.
CNegative | Negates the complex number.
CNorm | Returns the squared magnitude of a 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 a 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.
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 a complex number.
CSecH | Returns the complex hyperbolic secant of a complex number.
CSet | Uses the cartesian components (x,y) to set the real and imaginary parts of a complex number.
CSetImag | Sets the imaginary part of a complex number.
CSetReal | Sets the real part of a complex number.
CSgn | Returns the sign of a complex number.
CSin | Returns the complex sine of a complex number.
CSinH | Returns the complex hyperbolic sine of a complex number.
CSqr | Returns the square root of a complex.
CSqrt | Returns the square root of a complex number.
CSqrReal | Returns the complex square root of a real 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 a complex number.
CTanH | Returns the complex hyperbolic tangent of a complex number.

### Helper Procedures

Name | Description
--- | ---
acosh | Calculates the inverse hyperbolic cosine.
asinh | Calculates the inverse hyperbolic sine.
atanh | Calculates the inverse hyperbolic tangent of a number.
hypot3 | Computes the value of sqr(x^2 + y^2 + z^2).
IsInfinity | Determines whether the argument is an infinity.

# Comparison operators

Compares complex numbers for equality or inequality.

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

#### Example

    DIM c1 AS _complex = (1, 2)
    DIM c2 AS _complex = (3, 4)
    IF c1 = c2 THEN PRINT "equal" ELSE PRINT "different"

# Math operators

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

#### Examples

    DIM c1 AS _complex = (3, 4)
    DIM c2 AS _complex = (5, 6)
    c2 = c1 + c2
    print CStr(c2)

    DIM c1 AS _complex = (3, 4)
    DIM c2 AS _complex = (5, 6)
    c2 = c1 + 11
    print CStr(c2)

    DIM c1 AS _complex = (3, 4)
    DIM c2 AS _complex = (5, 6)
    c2 = 11 + c1
    print CStr(c2)

    DIM c1 AS _complex = (3, 4)
    DIM c2 AS _complex = (5, 6)
    c2 = c1 - c2
    print CStr(c2)

    DIM c1 AS _complex = (3, 4)
    DIM c2 AS _complex = c1 - 11
    print CStr(c2)

    DIM c1 AS _complex = (3, 4)
    DIM c2 AS _complex = 11 - c1
    print CStr(c2)

    DIM c1 AS _complex = (3, 4)
    DIM c2 AS _complex = (5, 6)
    c2 = c1 * c2
    print CStr(c2)

    DIM c1 AS _complex = (3, 4)
    DIM c2 AS _complex = c1 * 11
    print CStr(c2)

    DIM c1 AS _complex = (3, 4)
    DIM c2 AS _complex = 11 * c1
    print CStr(c2)

    DIM c1 AS _complex = (3, 4)
    DIM c2 AS _complex = (5, 6)
    c2 = c1 / c2
    print CStr(c2)

    DIM c1 AS _complex = (3, 4)
    DIM c2 AS _complex = c1 / 11
    print CStr(c2)

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

    DIM c1 AS _complex = (3, 4)
    DIM c2 AS _complex = 11 * c1
    print CStr(c2)

    DIM c1 AS _complex = (3, 4)
    DIM c2 AS _complex = (5, 6)
    c2 -= c1
    print CStr(c2)

    DIM c1 AS _complex = (3, 4)
    DIM c2 AS _complex = (5, 6)
    c1 *= c2
    print CStr(c2)

    DIM c1 AS _complex = (3, 4)
    DIM c2 AS _complex = (5, 6)
    c1 /= c2
    print CStr(c2)

    DIM c1 AS _complex = (3, 4)
    DIM c2 AS _complex = -c1
    print CStr(c2)

## CAbs / CMagnitude

Returns the magnitude of a complex number.

    FUNCTION CAbs (BYREF z AS _complex) AS DOUBLE
    FUNCTION CMagnitude (BYREF z AS _complex) AS DOUBLE

#### Example

    DIM c AS _complex = (2, 3)
    PRINT CAbs(c)
    Output: 3.60555127546399

## CAbs2 / CNorm

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

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

#### Example

    DIM z AS _complex = (2, 3)
    DIM d AS DOUBLE = CAbs2(z)
    PRINT d
    Output: 13
    --or--
    DIM z AS _complex = (2, 3)
    DIM d AS DOUBLE = CNorm(z)
    PRINT d
    Output: 13

## CAbsSqr

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

    FUNCTION CAbsSqr (BYREF z AS _complex) AS DOUBLE

#### Example

    DIM z AS _complex = (1.2345, -2.3456)
    print CAbsSqr(z)
    Output: 7.025829610000001

## CAddImag

Adds an imaginary number.

    FUNCTION CAddImag (BYREF z AS _complex, BYVAL y AS DOUBLE) AS _complex

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

#### Example

    DIM c AS _complex = (5, 6)
    c = CAddImag(c, 10)
    print CStr(c)

## CAddReal

Adds a real number.

    FUNCTION CAddReal (BYREF z AS _complex, BYVAL x AS DOUBLE) AS _complex

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

#### Examples

    DIM c AS _complex = (5, 6)
    c = CAddReal(c, 10)
    print CStr(c)

## CArcCos / CACos

Returns the complex arccosine of a complex number.

    FUNCTION CArcCos (BYREF value AS _complex) AS _complex
    FUNCTION CACos (BYREF value AS _complex) AS _complex

#### Example

    DIM c AS _complex = (1, 1)
    print CStr(CArcCos(c))
    Output: 0.9045568943023814 -1.061275061905036 * i

## CArcCosH / CACosH

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

    FUNCTION CArcCosH (BYREF value AS _complex) AS _complex
    FUNCTION CACosH (BYREF value AS _complex) AS _complex

#### Example

    DIM c AS _complex = (1, 1)
    print CStr(CArcCosH(c))
    Output: 1.061275061905036 +0.9045568943023813 * i

## CArcCosHReal / CACosHReal

Returns the complex hyperbolic arccosine of a real number.

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

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 _complex
    FUNCTION CACosReal (BYVAL value AS DOUBLE) AS _complex

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

#### Example

    print CStr(CArcCosReal(1)) ' = 0 0 * i
    print CStr(CArcCosReal(-1)) ' = 3.141592653589793 0 * i
    print CStr(CArcCosReal(2)) ' = 0 +1.316957896924817 * i

## CArcCot / CACot

Returns the complex arccotangent of a complex number.

    FUNCTION CArcCot (BYREF value AS _complex) AS _complex
    FUNCTION CACot (BYREF value AS _complex) AS _complex

#### Example

    DIM z AS _complex = (1, 1)
    z = CArcCot(z)
    PRINT CStr(z)
    Output: 0.5535743588970452 -0.4023594781085251 * i

## CArcCotH / CACotH

Returns the complex hyperbolic arccotangent of a complex number.

    FUNCTION CArcCotH (BYREF value AS _complex) AS _complex
    FUNCTION CACotH (BYREF value AS _complex) AS _complex

#### Example

    DIM c AS _complex = (1, 1)
    print CStr(CArcCotH(c))
    Output: 0.4023594781085251 -0.5535743588970452 * i

## CArcCsc / CACsc

Returns the complex arccosecant of a complex number.

    FUNCTION CArcCsc (BYREF value AS _complex) AS _complex
    FUNCTION CACsc (BYREF value AS _complex) AS _complex

#### Example

    DIM c AS _complex = (1, 1)
    print CStr(CArcCsc(c))
    Output: 0.4522784471511907 -0.5306375309525178 * i

## CArcCscH / CACscH

Returns the complex hyperbolic arccosecant of a complex number.

    FUNCTION CArcCscH (BYREF value AS _complex) AS _complex
    FUNCTION CACscH (BYREF value AS _complex) AS _complex

#### Example

    DIM c AS _complex = (1, 1)
    print CStr(CArcCscH(c))
    Output: 0.5306375309525179 -0.4522784471511906 * i

## CArcCscReal / CACscReal

Returns the complex arccosecant of a real number.

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

#### Example

    print CStr(CArcCscReal(1))
    Output: 1.570796326794897 0 * i

## CArcSec / CASec

Returns the complex arcsecant of a complex number.

    FUNCTION CArcSec (BYREF value AS _complex) AS _complex
    FUNCTION CASec (BYREF value AS _complex) AS _complex

#### Example

    DIM z AS _complex = (1, 1)
    z = CArcSec(z)
    PRINT CStr(z)
    Output: 1.118517879643706 +0.5306375309525176 * i

## CArcSecH / CASecH

Returns the complex hyperbolic arcsecant of a complex number.

    FUNCTION CArcSecH (BYREF value AS _complex) AS _complex
    FUNCTION CASecH (BYREF value AS _complex) AS _complex

#### Example

    DIM z AS _complex = (1, 1)
    z = CArcSecH(z)
    PRINT CStr(z)
    Output: 0.5306375309525178 -1.118517879643706 * i

## CArcSecReal / CASecReal

Returns the complex arcsecant of a real number.

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

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

#### Example

    print CStr(CArcSecReal(1.1))
    Output: 0.4296996661514246 0 * i

## CArcSin / CASin

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

    FUNCTION CArcSin (BYREF value AS _complex) AS _complex
    FUNCTION CASin (BYREF value AS _complex) AS _complex

#### Example

    DIM z AS _complex = (1, 1)
    z = CArcSin(z)
    PRINT CStr(z)
    Output: 0.6662394324925152 +1.061275061905036 * i

## CArcSinH / CASinH

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

    FUNCTION CArcSinH (BYREF value AS _complex) AS _complex
    FUNCTION CASinH (BYREF value AS _complex) AS _complex

#### Example

    DIM z AS _complex = (1, 1)
    z = CArcSinH(z)
    PRINT CStr(z)
    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 _complex
    FUNCTION CASinReal (BYVAL value AS DOUBLE) AS _complex

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

#### Example

    DIM z AS _complex = CArcSinReal(1)
    PRINT CStr(z)
    Output: 1.570796326794897 +0 * i

## CArcTan / CATan

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

    FUNCTION CArcTan (BYREF value AS _complex) AS _complex
    FUNCTION CATan (BYREF value AS _complex) AS _complex

#### Example

    DIM z AS _complex = (1, 1)
    z = CArcTan(z)
    PRINT CStr(z)
    Output: 1.017221967897851 +0.4023594781085251 * i

## CArcTanH / CATanH

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

    FUNCTION CArcTanH (BYREF value AS _complex) AS _complex
    FUNCTION CATanH (BYREF value AS _complex) AS _complex

#### Example

    DIM z AS _complex = (1, 1)
    z = CArcTanH(z)
    PRINT CStr(z)
    Output: 0.4023594781085251 +1.017221967897851 * i

## CArcTanHReal / CATanHReal

Returns the complex hyperbolic arctangent of a real number.

    FUNCTION CArcTanhReal (BYVAL value AS DOUBLE) AS _complex
    FUNCTION CATanhReal (BYVAL value AS DOUBLE) AS _complex

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 (BYREF z AS _complex) AS DOUBLE
    FUNCTION CArgument (BYREF z AS _complex) AS DOUBLE
    FUNCTION CPhase (BYREF z AS _complex) AS DOUBLE

#### Example

    DIM z AS _complex = (1, 0)
    DIM d AS DOUBLE = CArg(z)
    PRINT d
    Output: 0

    DIM z AS _complex = (0, 1)
    DIM d AS DOUBLE = CArg(z)
    PRINT d
    Output: 1.570796326794897

    DIM z AS _complex = (0, -1)
    DIM d AS DOUBLE = CArg(z)
    PRINT d
    Output: -1.570796326794897

    DIM z AS _complex = (-1, 0)
    DIM d AS DOUBLE = CArg(z)
    PRINT d
    Output: 3.141592653589793

## CConjugate / CConj

Returns the complex conjugate of a complex number.

    FUNCTION CConjugate (BYREF z AS _complex) AS _complex
    FUNCTION CConj (BYREF z AS _complex) AS _complex

#### Example

    DIM z AS _complex = (2, 3)
    z = CConj(z)
    PRINT CStr(z)
    Output: 2 - 3 * i

## CCos

Returns the complex cosine of a complex number.

    FUNCTION CCos (BYREF value AS _complex) AS _complex

#### Example

    DIM z AS _complex = (1, 1)
    z = CCos(z)
    PRINT CStr(z)
    Output: 0.8337300251311491 -0.9888977057628651 * i

## CCosH

Returns the complex hyperbolic cosine of a complex number.

    FUNCTION CCosH (BYREF value AS _complex) AS _complex

#### Example

    DIM z AS _complex = (1, 1)
    z = CCosH(z)
    PRINT CStr(z)
    Output: 0.8337300251311491 +0.9888977057628651 * i

## CCot

Returns the complex cotangent of a complex number.

    FUNCTION CCot (BYREF value AS _complex) AS _complex

#### Example

    DIM z AS _complex = (1, 1)
    z = CCot(z)
    PRINT CStr(z)
    Output: 0.2176215618544027 -0.8680141428959249 * i

## CCotH

Returns the complex hyperbolic cotangent of a complex number.

    FUNCTION CCotH (BYREF value AS _complex) AS _complex

#### Example

    DIM z AS _complex = (1, 1)
    z = CCotH(z)
    PRINT CStr(z)
    Output: 0.8680141428959249 -0.2176215618544029 * i

## CCsc

Returns the complex cosecant of a complex number.

    FUNCTION CCsc (BYREF value AS _complex) AS _complex

#### Example

    DIM z AS _complex = (1, 1)
    z = CCsc(z)
    PRINT CStr(z)
    Output: 0.6215180171704285 -0.3039310016284265 * i

## CCscH

Returns the complex hyperbolic cosecant of a complex number.

    FUNCTION CCscH (BYREF value AS _complex) AS _complex

#### Example

    DIM z AS _complex = (1, 1)
    z = CCscH(z)
    PRINT CStr(z)
    Output: 0.3039310016284265 -0.6215180171704285 * i

## CDivImag

Divides by an imaginary number.

    FUNCTION CDivImag (BYREF z AS _complex, BYVAL y AS DOUBLE) AS _complex

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

## CDivReal

Divides by a real number.

    FUNCTION CDivReal (BYREF z AS _complex, BYVAL x AS DOUBLE) AS _complex

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

## CExp

Returns the complex exponential of a complex number.

    FUNCTION CExp (BYREF value AS _complex) AS _complex

#### Example

    DIM z AS _complex = (1, 1)
    z = CExp(z)
    PRINT CStr(z)
    Output: 1.468693939915885 +2.287355287178842 * i

## CGetImag

Returns the imaginary part of a complex number.

    FUNCTION CGetImag (BYREF z AS _complex) AS DOUBLE

## CGetReal

Returns the real part of a complex number.

    FUNCTION CGetReal (BYREF z AS _complex) AS DOUBLE

## CLog

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

    FUNCTION CLog OVERLOAD (BYREF value AS _complex) AS _complex
    FUNCTION CLog OVERLOAD (BYREF value AS _complex, BYVAL baseValue AS DOUBLE) AS _complex

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

#### Examples

    DIM z AS _complex = (1, 1)
    z = CLog(z)
    PRINT CStr(z)
    Output: 0.3465735902799727 +0.7853981633974483 * i

    DIM z AS _complex = (0, 0)
    z = CLog(z)
    PRINT CStr(z)
    Output: -1.#INF

    DIM z AS _complex = (1, 1)
    z = CLog(z, 10)
    PRINT CStr(z)
    Output: 0.1505149978319906 +0.3410940884604603 * i

## CLog10

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

    FUNCTION CLog10 (BYREF value AS _complex) AS _complex

#### Example

    DIM z AS _complex = (1, 1)
    z = CLog10(z)
    PRINT CStr(z)
    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 |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 (BYREF value AS _complex) AS DOUBLE

#### Example

    DIM z AS _complex = (1.1, 0.1)
    DIM d AS DOUBLE = CLogAbs(z)
    print d
    Output: 0.09942542937258279

## CModulus / CMod

Returns the modulus of a complex number.

    FUNCTION CModulus (BYREF z AS _complex) AS DOUBLE
    FUNCTION CMod (BYREF z AS _complex) AS DOUBLE

#### Example

    DIM z AS _complex = (2.3, -4.5)
    print CModulus(z)
    Output: 5.053711507397311

    DIM z AS _complex = CPolar(0.2938, -0.5434)
    print CModulus(z)
    Output: 0.2938

## CMulImag

Multiplies by an imaginary number.

    FUNCTION CMulImag (BYREF z AS _complex, BYVAL y AS DOUBLE) AS _complex

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

#### Example

    DIM z AS _complex = (5, 6)
    z = CMulImag(z, 3)
    PRINT CStr(z)

## CMulReal

Multiplies by a real number.

    FUNCTION CMulReal (BYREF z AS _complex, BYVAL x AS DOUBLE) AS _complex

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

#### Example

    DIM z AS _complex = (5, 6)
    z = CMulReal(z, 3)
    PRINT CStr(z)

## 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 (BYREF z AS _complex, BYVAL n AS LONG, BYVAL k AS LONG = 0) AS _complex

#### Example

    DIM z AS _complex = (2.3, -4.5)
    DIM n AS LONG = 5
    FOR i AS LONG = 0 TO n - 1
       print CStr(CNthRoot(z, 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) AS _complex

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

#### Example

    DIM z AS _complex = CPolar(3, 4)

## CPow

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

    FUNCTION CPow OVERLOAD (BYREF value AS _complex, BYREF power AS _complex) AS _complex
    FUNCTION CPow OVERLOAD (BYREF value AS _complex, BYVAL power AS DOUBLE) AS _complex

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

#### Examples

    DIM z AS _complex = (1, 1)
    DIM b AS _complex = (2, 2)
    print CStr(CPow(z, b))
    Output: -0.2656539988492412 +0.3198181138561362 * i

    DIM z AS _complex = (1, 1)
    PRINT CStr(CPow(z, 2))
    Output: 1.224606353822378e-016 +2 * i

## CReciprocal / CInverse

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

    FUNCTION CReciprocal (BYREF value AS _complex) AS _complex
    FUNCTION CInverse (BYREF value AS _complex) AS _complex

#### Example

    DIM z AS _complex = (1, 1)
    z = CReciprocal(z)
    PRINT CStr(z)
    Output: 0.5 -0.5 * i

## CSec

Returns the complex secant of a complex number.

    FUNCTION CSec (BYREF value AS _complex) AS _complex

#### Example

    DIM z AS _complex = (1, 1)
    z = CSec(z)
    PRINT CStr(z)
    Output: 0.4983370305551869 +0.591083841721045 * i

## CSecH

Returns the complex hyperbolic secant of a complex number.

    FUNCTION CSecH (BYREF value AS _complex) AS _complex

#### Example

    DIM z AS _complex = (1, 1)
    z = CSecH(z)
    PRINT CStr(z)
    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.

    FUNCTION CSet (BYVAL x AS DOUBLE, BYVAL y AS DOUBLE) AS _complex
    FUNCTION CRet (BYVAL x AS DOUBLE, BYVAL y AS DOUBLE) AS _complex

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

#### Example

    DIM z AS _complex = CSet(3, 4)

## CSetImag

Sets the imaginary part of a complex number.

    SUB CSetImag (BYREF z AS _complex, BYVAL y AS DOUBLE)

Parameter | Description
--- | ---
z | The complex number.
y | A double value.

## CSetReal

Sets the real part of a complex number.

    SUB CSetReal (BYREF z AS _complex, BYVAL y AS DOUBLE)

Parameter | Description
--- | ---
z | The complex number.
y | A double value.

# 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.

    FUNCTION CSgn (BYREF z AS _complex) AS LONG

## CSin

Returns the complex sine of a complex number.

    FUNCTION CSin (BYREF value AS _complex) AS _complex

#### Example

    DIM z AS _complex = (1, 1)
    z = CSin(z)
    PRINT CStr(z)
    Output: 1.298457581415977 +0.6349639147847361 * i

## CSinH

Returns the complex hyperbolic sine of a complex number.

    FUNCTION CSinH (BYREF value AS _complex) AS _complex

#### Example

    DIM z AS _complex = (1, 1)
    z = CSinH(z)
    PRINT CStr(z)
    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 (BYREF value AS _complex) AS _complex
    FUNCTION CSqrt (BYREF value AS _complex) AS _complex

Parameter | Description
--- | ---
value | A complex number.

#### Examples

    DIM z AS _complex = (2, 3)
    z = CSqr(z)
    PRINT CStr(z)
    Output: 1.67414922803554 +0.895977476129838 * i

Compute the square root of -1:

    DIM z AS _complex = (-1)
    z = CSqr(z)
    PRINT CStr(z)
    Output: 0 +1.0 * i

## CSqrReal

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

    FUNCTION CSqrReal (BYVAL value AS DOUBLE) AS _complex

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

## CSubImag

Subtracts an imaginary number.

    FUNCTION CSubImag (BYREF z AS _complex, BYVAL y AS DOUBLE) AS _complex

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

#### Example

    DIM z AS _complex = (5, 6)
    z = CSubImag(z, 3)
    PRINT CStr(z)
    Output:  5 +3 * i

## CSubReal

Subtracts a real number.

    FUNCTION CSubReal (BYREF z AS _complex, BYVAL x AS DOUBLE) AS _complex

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

#### Example

    DIM z AS _complex = (5, 6)
    z = CSubReal(z, 2)
    PRINT CStr(z)
    Output: 3 +6 * i

## CSwap

Exchanges the contents of two complex numbers.

    SUB CSwap (BYREF z1 AS _complex, BYREF z2 AS _complex)

Parameter | Description
--- | ---
z1 / z2 | The complex numbers to swap.

## CTan

Returns the complex tangent of a complex number.

    FUNCTION CTan (BYREF value AS _complex) AS _complex

#### Example

    DIM z AS _complex = (1, 1)
    z = CTan(z)
    PRINT CStr(z)
    Output: 0.2717525853195117 +1.083923327338695 * i

## CTanH

Returns the complex hyperbolic tangent of a complex number.

    FUNCTION CTanH (BYREF value AS _complex) AS _complex

#### Example

    DIM z AS _complex = (1, 1)
    z = CTanH(z)
    PRINT CStr(z)
    Output: 1.083923327338695 +0.2717525853195119 * i

## acosh

Calculates the inverse hyperbolic cosine.

    FUNCTION acosh (BYVAL x AS DOUBLE) AS DOUBLE

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

# asinh

Calculates the inverse hyperbolic sine.

    FUNCTION asinh (BYVAL x AS DOUBLE) AS DOUBLE

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

# atanh

Returns the inverse hyperbolic tangent of a number.

    FUNCTION atanh (BYVAL x AS DOUBLE) AS DOUBLE

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

# hypot3

Computes the value of sqr(x^2 + y^2 + z^2).

    FUNCTION hypot3 (BYVAL x AS DOUBLE, BYVAL y AS DOUBLE, BYVAL z AS DOUBLE) AS DOUBLE

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

# 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.