Re: Mutable complex numbers [was Re: output formatting for classes]

2006-03-11 Thread Schüle Daniel
Steven D'Aprano wrote:
 On Fri, 10 Mar 2006 02:19:10 +0100, Schüle Daniel wrote:
 
 
yeah, i miss some things in complex implementation
for example c=complex()
c.abs = 2**0.5
c.angle = pi/2

should result in 1+1j :)
 
 
 Smiley noted, but consider:
 
 c = complex()
 = what is the value of c here?

default value is 0, for complex number that means
real = 0, imag = 0
is the same as
c.abs=0, c.angle=0

ok mathematically c.angle can be of arbitrary value
but defaulting it to zero is very handy
c = complex()
c.abs = 10
yields 10+0j

c=complex()
c.real = 2
c.imag = 2
c.abs = 50**0.5 # angle remains, length changed
yields 5+5j
c.angle = 0
yields 50**0.5 + 0j

 c.abs = 2**0.5
 = what is c's value now?

c.abs = 2**0.5
c.angle = 0

 
 c.angle = pi/2
 = now c has the value 1+1j
  
 Objects with indeterminate values are rarely a good idea.

IMHO it's perfectly consistent with
  int()
0
  long()
0L
  float()
0.0
 
complex()
  complex()
0j
 

but extending complex with default angle=0



 A better way would be for complex numbers to take a constructor that can
 take arguments in either Cartesian or polar form. So, hypothetically, the
 following would all be equivalent:
 
 1+1j
 complex(1,1)
 complex(real=1, img=1)
 complex(len=2**0.5, theta=pi/2)

ack
but after the creation of complex number one will have to
do all the transformations in another coord. system manually

 Another alternative would be a function to construct polar form complex
 numbers. It could be a plain function or a static method:
 
 cmath.polar(2**0.5, pi/2) = 1+1j
 complex.polar(2**0.5, pi/2) = 1+1j

maybe adding

c=complex.from_polar((length,angle))
d=complex.to_polar(c)
d == (length, angle)
True

would be sufficient, but I would prefer the other version

Regards

-- 
http://mail.python.org/mailman/listinfo/python-list

Mutable complex numbers [was Re: output formatting for classes]

2006-03-10 Thread Steven D'Aprano
On Fri, 10 Mar 2006 02:19:10 +0100, Schüle Daniel wrote:

 yeah, i miss some things in complex implementation
 for example c=complex()
 c.abs = 2**0.5
 c.angle = pi/2
 
 should result in 1+1j :)

Smiley noted, but consider:

c = complex()
= what is the value of c here?

c.abs = 2**0.5
= what is c's value now?

c.angle = pi/2
= now c has the value 1+1j
 
Objects with indeterminate values are rarely a good idea.

A better way would be for complex numbers to take a constructor that can
take arguments in either Cartesian or polar form. So, hypothetically, the
following would all be equivalent:

1+1j
complex(1,1)
complex(real=1, img=1)
complex(len=2**0.5, theta=pi/2)

Another alternative would be a function to construct polar form complex
numbers. It could be a plain function or a static method:

cmath.polar(2**0.5, pi/2) = 1+1j
complex.polar(2**0.5, pi/2) = 1+1j



-- 
Steven.

-- 
http://mail.python.org/mailman/listinfo/python-list