On Wed, 21 May 2008, Terry Carroll wrote: > The following (barely-tested) routine should calculate all the Nth roots > of a given x, even when x is negative and N is even:
I realize I'm probably talking to myself here, but for the benefit of the archives, I found a more elegant approach after reading http://everything2.com/node/1309141. The following routine instead uses the formula at the end of the page (although I must admit I needed to read the entire page very carefully before I actually understood it): def nthroots(x,n): """returns a list of all nth roots of x; see http://everything2.com/node/1309141 """ from math import atan2, pi from cmath import exp i = 0+1j z=complex(x) # express the cartesian (x+yi) complex number z # as polar (modulus R & argument theta) R = abs(z) theta = atan2(z.imag, z.real) coef = R**(1.0/n) return [coef * exp(i*(theta/n + 2*pi*k/n)) for k in range(0,n)] I'm not sure it's faster than the method from the prior email, but it certainly seems a bit less ham-handed. It could probably be sped up, at the cost of some obfuscation, by pulling a few more things out of the list comprehension, e.g., X = i*theta/n Y = (0+2j)*pi/n return [coeff * exp(X + Y*k) for k in range(0,n)] _______________________________________________ Tutor maillist - Tutor@python.org http://mail.python.org/mailman/listinfo/tutor