bug in modulus?
Gerard Flanagan
grflanagan at yahoo.co.uk
Mon Apr 24 04:08:46 EDT 2006
jantod at gmail.com wrote:
> But maybe I'm reading it wrong. In any case what I wanted was simply a
> way to extract the angle from a complex number where the angle is
> between 0 and 2*pi. I think I'll just take the modulus twice.
>
> def angle(complex):
> """Returns angle where 2*pi > angle >=0
>
> >>> angle(1+1j) - atan(1) < 1e-3
> True
> >>> angle(-1+1j) - (atan(-1) + 3*pi) % (2*pi) < 1e-3
> True
> >>> angle(0+1j) == pi/2
> True
> >>> angle(0-1j) == 1.5*pi
> True
> >>> angle(1+0j) == 0
> True
> >>> angle(0+0j) == 0
> True
> >>> angle(1-1e-100*1j) == 0
> True
> """
> if complex.real == 0:
> if complex.imag == 0:
> return 0
> if complex.imag < 0:
> return 1.5*pi
> return pi/2
> theta = (atan2(complex.imag, complex.real) % (2*pi)) % (2*pi)
> assert 2*pi > theta >=0, (theta, complex)
> return theta
>
from math import atan2, pi
def cangle(z):
ret = atan2(z.imag, z.real)
if ret < 0:
ret += 2*pi
return ret
assert cangle(1+1j) * 180 / pi == 45.0
assert cangle(-1+1j) * 180 / pi == 135.0
assert cangle(-1-1j) * 180 / pi == 225.0
assert cangle(1-1j) * 180 / pi == 315.0
assert cangle(1+0j) * 180 / pi == 0.0
assert cangle(-1+0j) * 180 / pi == 180.0
assert cangle(1j) * 180 / pi == 90.0
assert cangle(-1j) * 180 / pi == 270.0
Gerard
More information about the Python-list
mailing list