# FreeBSD Manual Pages

```Math::Cephes::Complex(User Contributed Perl DocumentatMath::Cephes::Complex(3)

NAME
Math::Cephes::Complex - Perl interface	to the cephes complex number routines

SYNOPSIS
use Math::Cephes::Complex qw(cmplx);
my \$z1	= cmplx(2,3);	       # \$z1 = 2 + 3 i
my \$z2	= cmplx(3,4);	       # \$z2 = 3 + 4 i
my \$z3	= \$z1->radd(\$z2);      # \$z3 = \$z1 + \$z2

DESCRIPTION
This module is a	layer on top of	the basic routines in the cephes math
library to handle complex numbers. A complex number is created via any
of the following	syntaxes:

my \$f = Math::Cephes::Complex->new(3, 2);   # \$f = 3 +	2 i
my \$g = new Math::Cephes::Complex(5, 3);    # \$g = 5 +	3 i
my \$h = cmplx(7, 5);			     # \$h = 7 +	5 i

the last	one being available by importing cmplx.	If no arguments	are
specified, as in

my \$h =	cmplx();

then the	defaults \$z = 0	+ 0 i are assumed. The real and	imaginary part
of a complex number are represented respectively	by

\$f->{r}; \$f->{i};

or, as methods,

\$f->r;  \$f->i;

and can be set according	to

\$f->{r} = 4; \$f->{i} =	9;

or, again, as methods,

\$f->r(4);   \$f->i(9);

The complex number can be printed out as

print \$f->as_string;

A summary of the	usage is as follows.

csin: Complex circular sine
SYNOPSIS:

# void csin();
# cmplx z, w;

\$z = cmplx(2, 3);	 # \$z =	2 + 3 i
\$w = \$z->csin;
print \$w->{r}, '  ', \$w->{i};  # prints real and imaginary parts of	\$w
print \$w->as_string;	   # prints \$w as Re(\$w) + i Im(\$w)

DESCRIPTION:

If
z = x +	iy,

then

w = sin	x  cosh	y  +  i	cos x sinh y.

ccos: Complex circular cosine
SYNOPSIS:

# void ccos();
# cmplx z, w;

\$z = cmplx(2, 3);	 # \$z =	2 + 3 i
\$w = \$z->ccos;
print \$w->{r}, '  ', \$w->{i};  # prints real and imaginary parts of	\$w
print \$w->as_string;	   # prints \$w as Re(\$w) + i Im(\$w)

DESCRIPTION:

If
z = x +	iy,

then

w = cos	x  cosh	y  -  i	sin x sinh y.

ctan: Complex circular tangent
SYNOPSIS:

# void ctan();
# cmplx z, w;

\$z = cmplx(2, 3);	 # \$z =	2 + 3 i
\$w = \$z->ctan;
print \$w->{r}, '  ', \$w->{i};  # prints real and imaginary parts of	\$w
print \$w->as_string;	   # prints \$w as Re(\$w) + i Im(\$w)

DESCRIPTION:

If
z = x +	iy,

then

sin 2x  +	 i sinh	2y
w  =  --------------------.
cos 2x  +  cosh 2y

On the real	axis the denominator is	zero at	odd multiples
of PI/2.  The denominator is evaluated by its Taylor
series near	these points.

ccot: Complex circular cotangent
SYNOPSIS:

# void ccot();
# cmplx z, w;

\$z = cmplx(2, 3);	 # \$z =	2 + 3 i
\$w = \$z->ccot;
print \$w->{r}, '  ', \$w->{i};  # prints real and imaginary parts of	\$w
print \$w->as_string;	   # prints \$w as Re(\$w) + i Im(\$w)

DESCRIPTION:

If
z = x +	iy,

then

sin 2x  -	 i sinh	2y
w  =  --------------------.
cosh 2y	-  cos 2x

On the real	axis, the denominator has zeros	at even
multiples of PI/2.	Near these points it is	evaluated
by a Taylor	series.

casin: Complex circular arc sine
SYNOPSIS:

# void casin();
# cmplx z, w;

\$z = cmplx(2, 3);	 # \$z =	2 + 3 i
\$w = \$z->casin;
print \$w->{r}, '  ', \$w->{i};  # prints real and imaginary parts of	\$w
print \$w->as_string;	   # prints \$w as Re(\$w) + i Im(\$w)

DESCRIPTION:

Inverse complex sine:

2
w =	-i clog( iz + csqrt( 1 - z ) ).

cacos: Complex circular arc cosine
SYNOPSIS:

# void cacos();
# cmplx z, w;

\$z = cmplx(2, 3);	 # \$z =	2 + 3 i
\$w = \$z->cacos;
print \$w->{r}, '  ', \$w->{i};  # prints real and imaginary parts of	\$w
print \$w->as_string;	   # prints \$w as Re(\$w) + i Im(\$w)

DESCRIPTION:

w =	arccos z  =  PI/2 - arcsin z.

catan: Complex circular arc tangent
SYNOPSIS:

# void catan();
# cmplx z, w;

\$z = cmplx(2, 3);	 # \$z =	2 + 3 i
\$w = \$z->catan;
print \$w->{r}, '  ', \$w->{i};  # prints real and imaginary parts of	\$w
print \$w->as_string;	   # prints \$w as Re(\$w) + i Im(\$w)

DESCRIPTION:

If
z = x +	iy,

then
1	     (	  2x	 )
Re w  =  - arctan(-----------)  +  k PI
2	     (	   2	2)
(1	- x  - y )

( 2	      2)
1	  (x  +	 (y+1) )
Im w  =  - log(------------)
4	  ( 2	      2)
(x  +	 (y-1) )

Where k is an arbitrary integer.

csinh: Complex hyperbolic sine
SYNOPSIS:

# void csinh();
# cmplx z,	w;

\$z = cmplx(2, 3);	 # \$z =	2 + 3 i
\$w = \$z->csinh;
print \$w->{r}, '  ', \$w->{i};  # prints real and imaginary parts of	\$w
print \$w->as_string;	   # prints \$w as Re(\$w) + i Im(\$w)

DESCRIPTION:

csinh z = (cexp(z)	- cexp(-z))/2
= sinh x *	cos y  +  i cosh x * sin y .

casinh: Complex inverse hyperbolic sine
SYNOPSIS:

# void casinh();
# cmplx z,	w;

\$z = cmplx(2, 3);	 # \$z =	2 + 3 i
\$w = \$z->casinh;
print \$w->{r}, '  ', \$w->{i};  # prints real and imaginary parts of	\$w
print \$w->as_string;	   # prints \$w as Re(\$w) + i Im(\$w)

DESCRIPTION:

casinh z =	-i casin iz .

ccosh: Complex hyperbolic cosine
SYNOPSIS:

# void ccosh();
# cmplx z,	w;

\$z = cmplx(2, 3);	 # \$z =	2 + 3 i
\$w = \$z->ccosh;
print \$w->{r}, '  ', \$w->{i};  # prints real and imaginary parts of	\$w
print \$w->as_string;	   # prints \$w as Re(\$w) + i Im(\$w)

DESCRIPTION:

ccosh(z) =	cosh x	cos y +	i sinh x sin y .

cacosh: Complex inverse hyperbolic cosine
SYNOPSIS:

# void cacosh();
# cmplx z,	w;

\$z = cmplx(2, 3);	 # \$z =	2 + 3 i
\$w = \$z->cacosh;
print \$w->{r}, '  ', \$w->{i};  # prints real and imaginary parts of	\$w
print \$w->as_string;	   # prints \$w as Re(\$w) + i Im(\$w)

DESCRIPTION:

acosh z = i acos z	.

ctanh: Complex hyperbolic tangent
SYNOPSIS:

# void ctanh();
# cmplx z, w;

\$z = cmplx(2, 3);	 # \$z =	2 + 3 i
\$w = \$z->ctanh;
print \$w->{r}, '  ', \$w->{i};  # prints real and imaginary parts of	\$w
print \$w->as_string;	   # prints \$w as Re(\$w) + i Im(\$w)

DESCRIPTION:

tanh z = (sinh 2x  +  i sin	2y) / (cosh 2x + cos 2y) .

catanh: Complex inverse hyperbolic tangent
SYNOPSIS:

# void catanh();
# cmplx z,	w;

\$z = cmplx(2, 3);	 # \$z =	2 + 3 i
\$w = \$z->catanh;
print \$w->{r}, '  ', \$w->{i};  # prints real and imaginary parts of	\$w
print \$w->as_string;	   # prints \$w as Re(\$w) + i Im(\$w)

DESCRIPTION:

Inverse tanh, equal to  -i	catan (iz);

cpow: Complex power function
SYNOPSIS:

# void cpow();
# cmplx a,	z, w;

\$a = cmplx(5, 6);	 # \$z =	5 + 6 i
\$z = cmplx(2, 3);	 # \$z =	2 + 3 i
\$w = \$a->cpow(\$z);
print \$w->{r}, '  ', \$w->{i};  # prints real and imaginary parts of	\$w
print \$w->as_string;	   # prints \$w as Re(\$w) + i Im(\$w)

DESCRIPTION:

Raises complex A to the complex Zth power.
Definition	is per AMS55 # 4.2.8,
analytically equivalent to	cpow(a,z) = cexp(z clog(a)).

cmplx: Complex number arithmetic
SYNOPSIS:

# typedef struct {
#	  double r;	real part
#	  double i;	imaginary part
#	 }cmplx;

# cmplx *a,	*b, *c;

\$a = cmplx(3, 5);	# \$a = 3 + 5 i
\$b = cmplx(2, 3);	# \$b = 2 + 3 i

\$c = \$a->cadd( \$b );  #   c	= a + b
\$c = \$a->csub( \$b );  #   c	= a - b
\$c = \$a->cmul( \$b );  #   c	= a * b
\$c = \$a->cdiv( \$b );  #   c	= a / b
\$c = \$a->cneg;	  #   c	= -a
\$c = \$a->cmov;	  #   c	= a

print \$c->{r}, '  ', \$c->{i};   # prints real and imaginary	parts of \$c
print \$c->as_string;	   # prints \$c as Re(\$c) + i Im(\$c)

DESCRIPTION:

c.r  =  b.r + a.r
c.i  =  b.i + a.i

Subtraction:
c.r  =  b.r - a.r
c.i  =  b.i - a.i

Multiplication:
c.r  =  b.r * a.r  -  b.i * a.i
c.i  =  b.r * a.i  +  b.i * a.r

Division:
d    =  a.r * a.r  +  a.i * a.i
c.r  = (b.r * a.r  + b.i	* a.i)/d
c.i  = (b.i * a.r  -  b.r * a.i)/d

cabs: Complex absolute value
SYNOPSIS:

# double a,	cabs();
# cmplx z;

\$z = cmplx(2, 3);	 # \$z =	2 + 3 i
\$a = cabs( \$z );

DESCRIPTION:

If z = x + iy

then

a = sqrt( x**2 + y**2	).

Overflow and underflow are avoided by testing the magnitudes
of x and y before squaring.	 If either is outside half of
the	floating point full scale range, both are rescaled.

csqrt: Complex square root
SYNOPSIS:

# void csqrt();
# cmplx z, w;

\$z = cmplx(2, 3);	 # \$z =	2 + 3 i
\$w = \$z->csqrt;
print \$w->{r}, '  ', \$w->{i};  # prints real and imaginary parts of	\$w
print \$w->as_string;	   # prints \$w as Re(\$w) + i Im(\$w)

DESCRIPTION:

If z = x + iy,  r =	|z|, then

1/2
Im w  =  [ (r - x)/2 ]   ,

Re w  =  y / 2 Im w.

Note that -w is also a square root of z.  The root chosen
is always in the upper half	plane.

Because of the potential for cancellation error in r - x,
the	result is sharpened by doing a Heron iteration
(see sqrt.c) in complex arithmetic.

BUGS
Please report any to Randy Kobes <randy@theoryx5.uwinnipeg.ca>

For the basic interface to the cephes complex number routines, see
complex number routines.

The C code for the Cephes Math Library is Copyright 1984, 1987, 1989,
2002 by Stephen L. Moshier, and is available at
http://www.netlib.org/cephes/.  Direct inquiries	to 30 Frost Street,
Cambridge, MA 02140.

The perl	interface is copyright 2000, 2002 by Randy Kobes.  This
library is free software; you can redistribute it and/or	modify it
under the same terms as Perl itself.

perl v5.32.1			  2016-05-06	      Math::Cephes::Complex(3)
```