[Python-checkins] r57789 - python/branches/decimal-branch/Lib/decimal.py

facundo.batista python-checkins at python.org
Fri Aug 31 02:23:13 CEST 2007


Author: facundo.batista
Date: Fri Aug 31 02:23:13 2007
New Revision: 57789

Modified:
   python/branches/decimal-branch/Lib/decimal.py
Log:

Made decimal.py Py2.3 friendly.


Modified: python/branches/decimal-branch/Lib/decimal.py
==============================================================================
--- python/branches/decimal-branch/Lib/decimal.py	(original)
+++ python/branches/decimal-branch/Lib/decimal.py	Fri Aug 31 02:23:13 2007
@@ -2110,7 +2110,7 @@
                 return None
 
             # compute nth root of xc using Newton's method
-            a = 1 << -(-_nbits(xc)//n) # initial estimate
+            a = 1L << -(-_nbits(xc)//n) # initial estimate
             while True:
                 q, r = divmod(xc, a**(n-1))
                 if a <= q:
@@ -5028,8 +5028,8 @@
     integer to x / 2**shift; use round-to-even in case of a tie.
 
     """
-    b, q = 1 << shift, x >> shift
-    return q + (((x & (b-1))<<1) + (q&1) > b)
+    b, q = 1L << shift, x >> shift
+    return q + (2*(x & (b-1)) + (q&1) > b)
 
 def _div_nearest(a, b):
     """Closest integer to a/b, a and b positive integers; rounds to even
@@ -5037,7 +5037,7 @@
 
     """
     q, r = divmod(a, b)
-    return q + ((r<<1) + (q&1) > b)
+    return q + (2*r + (q&1) > b)
 
 def _ilog(x, M, L = 8):
     """Integer approximation to M*log(x/M), with absolute error boundable
@@ -5072,9 +5072,9 @@
     y = x-M
     # argument reduction; R = number of reductions performed
     R = 0
-    while (R <= L and abs(y) << L-R >= M or
+    while (R <= L and long(abs(y)) << L-R >= M or
            R > L and abs(y) >> R-L >= M):
-        y = _div_nearest(M*y << 1,
+        y = _div_nearest(long(M*y) << 1,
                          M + _sqrt_nearest(M*(M+_rshift_nearest(y, R)), M))
         R += 1
 
@@ -5189,18 +5189,18 @@
     # expm1(z/2**(R-1)), ... , exp(z/2), exp(z).
 
     # Find R such that x/2**R/M <= 2**-L
-    R = _nbits((x<<L)//M)
+    R = _nbits((long(x)<<L)//M)
 
     # Taylor series.  (2**L)**T > M
     T = -int(-10*len(str(M))//(3*L))
     y = _div_nearest(x, T)
-    Mshift = M<<R
+    Mshift = long(M)<<R
     for i in xrange(T-1, 0, -1):
         y = _div_nearest(x*(Mshift + y), Mshift * i)
 
     # Expansion
     for k in xrange(R-1, -1, -1):
-        Mshift = M<<(k+2)
+        Mshift = long(M)<<(k+2)
         y = _div_nearest(y*(y+Mshift), Mshift)
 
     return M+y


More information about the Python-checkins mailing list