1ffe6aab27c47c577878f253ad53bf936027fea1
[haskell-report.git] / report / complex.verb
1 %**<title>The Haskell 98 Library Report: Complex Numbers</title>
2 %**~header
3 \section{Complex Numbers}
4 \label{lib-num}
5
6 \outline{
7 \inputHS{lib-hdrs/Complex}
8 }
9
10 Complex numbers are an algebraic type.
11 The constructor @(:+)@\indextt{:+} forms a complex number from its
12 real and imaginary rectangular components.  This constructor is
13 strict: if either the real part or the imaginary part of the number is
14 $\bot$, the entire number is $\bot$.  A complex number may also
15 be formed from polar components of magnitude and phase by the function
16 @mkPolar@\indextt{mkPolar}.  The function @cis@\indextt{polar}
17 produces a complex number from an angle "t".
18 Put another way, @cis@ "t" is a complex value with magnitude "1"
19 and phase "t" (modulo "2\pi").
20
21 The function @polar@\indextt{polar} takes a complex number and
22 returns a (magnitude, phase) pair in canonical form: The magnitude is
23 nonnegative, and the phase, in the range $(- \pi , \pi ]$; if the
24 magnitude is zero, then so is the phase.  
25
26 The functions @realPart@\indextt{realPart} and
27 @imagPart@\indextt{imagPart} extract the rectangular components of a
28 complex number and the functions @magnitude@\indextt{magnitude} and
29 @phase@\indextt{phase} extract the polar components of a complex
30 number.  The function @conjugate@\indextt{conjugate} computes the
31 conjugate of a complex number in the usual way.
32
33 The magnitude and sign of a complex number are defined as follows:
34 \bprog
35 @
36 abs z             =  magnitude z :+ 0
37 signum 0          =  0
38 signum z@@(x:+y)   =  x/r :+ y/r  where r = magnitude z
39 @
40 \eprog
41 That is, @abs@ $z$ is a number with the magnitude of $z$, but oriented
42 in the positive real direction, whereas @signum@ $z$ has the phase of
43 $z$, but unit magnitude.
44
45 \subsection{Library {\tt Complex}}
46 \inputHS{lib-code/Complex}
47
48 %**~footer
49