Here’s a *VERY*
naïve solution (ie, a 4am solution) for complex ^ positiveInt. It could be improved
by generating the binomial expansion directly for n and avoiding a bunch of
extra Complex64 instantiations. IronPython 0.9.1 on .NET 2.0.50215.44 Copyright (c) Microsoft Corporation. All rights reserved. >>> a = 1j >>> a ** 2 (-1+0j) >>> a ** 1 1j >>> a ** 0 (1+0j) >>> a ** 3 -1j >>> a ** 4 (1+0j) ----- Keith J. Farmer [EMAIL PROTECTED] public Complex64 Power(Complex64 y) { double a = real; double b = imag; double c = y.real; double d = y.imag; if (Math.Truncate(c) == c && d == 0
&& c >= 0) { switch ((int) c) { case 0: return new Complex64(1,
0); case 1: return this; case 2: { double newReal = a * a - b *
b; double newImaginary = 2 * a *
b; return new Complex64(newReal,
newImaginary); } default: { double newReal = a * a - b *
b; double newImaginary = 2 * a *
b; return (new Complex64(newReal,
newImaginary)) * this.Power(new Complex64(c-2, 0)); } } } double powers = a * a + b *
b; double arg = Math.Atan2(b, a); double mul = Math.Pow(powers, c / 2) * Math.Pow(Math.E, -d * arg); double common = c * arg + .5
* d * Math.Log(powers, Math.E); return new Complex64(mul
* Math.Cos(common), mul
* Math.Sin(common)); } |
_______________________________________________ users-ironpython.com mailing list users-ironpython.com@lists.ironpython.com http://lists.ironpython.com/listinfo.cgi/users-ironpython.com