[Python-bugs-list] [ python-Bugs-457066 ] pow(a,b,c) should accept b<0

noreply@sourceforge.net noreply@sourceforge.net
Thu, 30 Aug 2001 18:46:45 -0700


Bugs item #457066, was opened at 2001-08-30 18:17
You can respond by visiting: 
http://sourceforge.net/tracker/?func=detail&atid=105470&aid=457066&group_id=5470

Category: Python Library
Group: Feature Request
Status: Open
Resolution: None
Priority: 5
Submitted By: Nobody/Anonymous (nobody)
>Assigned to: Tim Peters (tim_one)
Summary: pow(a,b,c) should accept b<0

Initial Comment:
You should be able to raise integers to negative powers
mod n.  If b<0, pow(a,b,c)==pow(pow(a,-1,c),-b,c)
where pow(a,-1,c) is a's multiplicative inverse mod c,
computed with the extended Euclid algorithm.  This
would be in Python's spirit of math completeness and
would save people from the trouble of having to figure
out the algorithm over and over.  

I can come up with a patch for this if it's agreed on
as desirable.


----------------------------------------------------------------------

>Comment By: Guido van Rossum (gvanrossum)
Date: 2001-08-30 18:46

Message:
Logged In: YES 
user_id=6380

Hm.

In 2.2a2, currently, pow(a, b, c) for ints a, b, c where b <
0 is defined as pow(float(a), float(b), float(c)), IOW
(1.0/(a**b))%c. This doesn't make a lot of sense for the
three-argument version though, because the result tends to
be between 0.0 and 1.0...  But it is consistent with the
(future) rule that operations on integers and floats should
give results with the same value only a different type.

Assigning to Tim, whose mathematical sensibilities are more
refined than mine...

----------------------------------------------------------------------

You can respond by visiting: 
http://sourceforge.net/tracker/?func=detail&atid=105470&aid=457066&group_id=5470