Re: Python Exponent Question

2007-12-17 Thread Michael J. Fromberger
In article 
[EMAIL PROTECTED],
 databyss [EMAIL PROTECTED] wrote:

 I have a simple program and the output isn't what I expect.  Could
 somebody please explain why?
 
 Here's the code:
 
 #simple program
 print v = 2
 v = 2
 print v**v = 2**2 =, v**v
 print v**v**v = 2**2**2 =, v**v**v
 print v**v**v**v = 2**2**2**2 =, v**v**v**v
 #end program
 
 Here's the output:
 
 
 v = 2
 v**v = 2**2 = 4
 v**v**v = 2**2**2 = 16
 v**v**v**v = 2**2**2**2 = 65536
 
 
 I would expect 2**2**2**2 to be 256

Python's ** operator associates to the right, not to the left; thus, 

  2 ** 2 ** 2 ** 2

... really means

  2 ** (2 ** (2 ** 2))

... and not

  ((2 ** 2) ** 2) ** 2

... as you seem to expect.  As usual, you can enforce different 
associations by explicitly including the parentheses.

Cheers,
-M

-- 
Michael J. Fromberger | Lecturer, Dept. of Computer Science
http://www.dartmouth.edu/~sting/  | Dartmouth College, Hanover, NH, USA
-- 
http://mail.python.org/mailman/listinfo/python-list


Python Exponent Question

2007-12-10 Thread databyss
I have a simple program and the output isn't what I expect.  Could
somebody please explain why?

Here's the code:

#simple program
print v = 2
v = 2
print v**v = 2**2 =, v**v
print v**v**v = 2**2**2 =, v**v**v
print v**v**v**v = 2**2**2**2 =, v**v**v**v
#end program

Here's the output:


v = 2
v**v = 2**2 = 4
v**v**v = 2**2**2 = 16
v**v**v**v = 2**2**2**2 = 65536


I would expect 2**2**2**2 to be 256
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: Python Exponent Question

2007-12-10 Thread Carsten Haese
On Mon, 2007-12-10 at 10:15 -0800, databyss wrote:
 I have a simple program and the output isn't what I expect.  Could
 somebody please explain why?
 [...]
 v**v**v**v = 2**2**2**2 = 65536

 I would expect 2**2**2**2 to be 256

Exponentiation is right-associative. 2**2**2**2 = 2**(2**(2**2)) =
2**(2**4) = 2**16 = 65536.

-- 
Carsten Haese
http://informixdb.sourceforge.net


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


Re: Python Exponent Question

2007-12-10 Thread Tim Chase
databyss wrote:
 I have a simple program and the output isn't what I expect.  Could
 somebody please explain why?
 
 Here's the code:
 
 #simple program
 print v = 2
 v = 2
 print v**v = 2**2 =, v**v
 print v**v**v = 2**2**2 =, v**v**v
 print v**v**v**v = 2**2**2**2 =, v**v**v**v
 #end program
 
 Here's the output:
 
 v = 2
 v**v = 2**2 = 4
 v**v**v = 2**2**2 = 16
 v**v**v**v = 2**2**2**2 = 65536
 
 I would expect 2**2**2**2 to be 256

Order of operations and proximity:

  2**(2**(2**2))
65536
  ((2**2)**2)**2
256

Apparently Python assumes the former and you assume the latter. 
When in doubt about order of operations, use parens.  And even 
when you *know* the order of operations, be kind to those who 
will have to read your code later and put in the parens anyways.

-tkc



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


Re: Python Exponent Question

2007-12-10 Thread Zero Piraeus
:

 v = 2
 v**v = 2**2 = 4
 v**v**v = 2**2**2 = 16
 v**v**v**v = 2**2**2**2 = 65536

 I would expect 2**2**2**2 to be 256

... in an unparenthesized sequence of power and unary operators, the
operators are evaluated from right to left ...
 - http://docs.python.org/ref/power.html

So, 2**2**2**2 = 2**(2**(2**2)) = 65536

 -[]z.
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: Python Exponent Question

2007-12-10 Thread Christian Heimes
databyss wrote:
 I would expect 2**2**2**2 to be 256

I stumbled upon it, too.

2**2**2**2 == 2**(2**(2**2)) == 2**16 == 65536

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


Re: Python Exponent Question

2007-12-10 Thread Robert Kern
databyss wrote:
 I have a simple program and the output isn't what I expect.  Could
 somebody please explain why?
 
 Here's the code:
 
 #simple program
 print v = 2
 v = 2
 print v**v = 2**2 =, v**v
 print v**v**v = 2**2**2 =, v**v**v
 print v**v**v**v = 2**2**2**2 =, v**v**v**v
 #end program
 
 Here's the output:
 
 v = 2
 v**v = 2**2 = 4
 v**v**v = 2**2**2 = 16
 v**v**v**v = 2**2**2**2 = 65536
 
 I would expect 2**2**2**2 to be 256

Exponentiation is right-associative. I.e. 2**2**2**2 == 2**(2**(2**2))

The reason is that left-associativity is better written with multiplication.

  (x**y)**z == x**(y*z)

-- 
Robert Kern

I have come to believe that the whole world is an enigma, a harmless enigma
 that is made terrible by our own mad attempt to interpret it as though it had
 an underlying truth.
  -- Umberto Eco

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