diff options
author | Guido van Rossum <guido@python.org> | 1992-08-13 12:14:11 (GMT) |
---|---|---|
committer | Guido van Rossum <guido@python.org> | 1992-08-13 12:14:11 (GMT) |
commit | e876949f2b8a68646cac269cff9fd1c71975d3ac (patch) | |
tree | 3d9558e392c99c83b47fa744cfde6a5bd12692db /Demo/classes/Complex.py | |
parent | 04691fc1c1bb737c0db772f5c1ea697a351a01d9 (diff) | |
download | cpython-e876949f2b8a68646cac269cff9fd1c71975d3ac.zip cpython-e876949f2b8a68646cac269cff9fd1c71975d3ac.tar.gz cpython-e876949f2b8a68646cac269cff9fd1c71975d3ac.tar.bz2 |
Initial revision
Diffstat (limited to 'Demo/classes/Complex.py')
-rwxr-xr-x | Demo/classes/Complex.py | 73 |
1 files changed, 73 insertions, 0 deletions
diff --git a/Demo/classes/Complex.py b/Demo/classes/Complex.py new file mode 100755 index 0000000..5880c64 --- /dev/null +++ b/Demo/classes/Complex.py @@ -0,0 +1,73 @@ +# Complex numbers + + +from math import sqrt + + +def complex(re, im): + return Complex().init(re, im) + + +class Complex: + + def init(self, re, im): + self.re = float(re) + self.im = float(im) + return self + + def __repr__(self): + return 'complex' + `self.re, self.im` + + def __cmp__(a, b): + a = a.__abs__() + b = b.__abs__() + return (a > b) - (a < b) + + def __float__(self): + if self.im: + raise ValueError, 'cannot convert complex to float' + return float(self.re) + + def __long__(self): + return long(float(self)) + + def __int__(self): + return int(float(self)) + + def __abs__(self): + # XXX overflow? + return sqrt(self.re*self.re + self.im*self.im) + + def __add__(a, b): + return complex(a.re + b.re, a.im + b.im) + + def __sub__(a, b): + return complex(a.re - b.re, a.im - b.im) + + def __mul__(a, b): + return complex(a.re*b.re - a.im*b.im, a.re*b.im + a.im*b.re) + + def __div__(a, b): + q = (b.re*b.re + b.im*b.im) + re = (a.re*b.re + a.im*b.im) / q + im = (a.im*b.re - b.im*a.re) / q + return complex(re, im) + + def __neg__(self): + return complex(-self.re, -self.im) + + +def test(): + a = complex(2, 0) + b = complex(3, 4) + print a, b + print a+b, a-b, a*b, a/b + print b+a, b-a, b*a, b/a + i = complex(0, 1) + print i, i*i, i*i*i, i*i*i*i + j = complex(1, 1) + print j, j*j, j*j*j, j*j*j*j + print abs(j), abs(j*j), abs(j*j*j), abs(j*j*j*j) + print i/-i + +test() |