blob: 5880c64eff1cadfb3c650f007f79dad90fb0892f [file] [log] [blame]
Guido van Rossume8769491992-08-13 12:14:11 +00001# Complex numbers
2
3
4from math import sqrt
5
6
7def complex(re, im):
8 return Complex().init(re, im)
9
10
11class Complex:
12
13 def init(self, re, im):
14 self.re = float(re)
15 self.im = float(im)
16 return self
17
18 def __repr__(self):
19 return 'complex' + `self.re, self.im`
20
21 def __cmp__(a, b):
22 a = a.__abs__()
23 b = b.__abs__()
24 return (a > b) - (a < b)
25
26 def __float__(self):
27 if self.im:
28 raise ValueError, 'cannot convert complex to float'
29 return float(self.re)
30
31 def __long__(self):
32 return long(float(self))
33
34 def __int__(self):
35 return int(float(self))
36
37 def __abs__(self):
38 # XXX overflow?
39 return sqrt(self.re*self.re + self.im*self.im)
40
41 def __add__(a, b):
42 return complex(a.re + b.re, a.im + b.im)
43
44 def __sub__(a, b):
45 return complex(a.re - b.re, a.im - b.im)
46
47 def __mul__(a, b):
48 return complex(a.re*b.re - a.im*b.im, a.re*b.im + a.im*b.re)
49
50 def __div__(a, b):
51 q = (b.re*b.re + b.im*b.im)
52 re = (a.re*b.re + a.im*b.im) / q
53 im = (a.im*b.re - b.im*a.re) / q
54 return complex(re, im)
55
56 def __neg__(self):
57 return complex(-self.re, -self.im)
58
59
60def test():
61 a = complex(2, 0)
62 b = complex(3, 4)
63 print a, b
64 print a+b, a-b, a*b, a/b
65 print b+a, b-a, b*a, b/a
66 i = complex(0, 1)
67 print i, i*i, i*i*i, i*i*i*i
68 j = complex(1, 1)
69 print j, j*j, j*j*j, j*j*j*j
70 print abs(j), abs(j*j), abs(j*j*j), abs(j*j*j*j)
71 print i/-i
72
73test()