SF bug #1048728: Bug fixes and cleanup for decimal.py

(Contributed by Neal Norwitz.  Reviewed by Facundo Bastista.)
This commit is contained in:
Raymond Hettinger 2004-10-20 06:58:28 +00:00
parent 9414ded8f3
commit 76e60d687d

View file

@ -136,7 +136,6 @@
import threading
import copy
import operator
#Rounding
ROUND_DOWN = 'ROUND_DOWN'
@ -1716,14 +1715,11 @@ def __pow__(self, n, modulo = None, context=None):
val = Decimal(1)
context = context._shallow_copy()
context.prec = firstprec + elength + 1
rounding = context.rounding
if n < 0:
#n is a long now, not Decimal instance
n = -n
mul = Decimal(1).__div__(mul, context=context)
shouldround = context._rounding_decision == ALWAYS_ROUND
spot = 1
while spot <= n:
spot <<= 1
@ -1742,7 +1738,7 @@ def __pow__(self, n, modulo = None, context=None):
spot >>= 1
context.prec = firstprec
if shouldround:
if context._rounding_decision == ALWAYS_ROUND:
return val._fix(context)
return val
@ -1823,8 +1819,6 @@ def _rescale(self, exp, rounding=None, context=None, watchexp=1):
if ans:
return ans
out = 0
if watchexp and (context.Emax < exp or context.Etiny() > exp):
return context._raise_error(InvalidOperation, 'rescale(a, INF)')
@ -1844,7 +1838,6 @@ def _rescale(self, exp, rounding=None, context=None, watchexp=1):
tmp._int = (0,) + tmp._int
digits += 1
prevexact = context.flags[Inexact]
if digits < 0:
tmp._exp = -digits + tmp._exp
tmp._int = (0,1)
@ -1940,7 +1933,6 @@ def sqrt(self, context=None):
half = Decimal('0.5')
count = 1
maxp = firstprec + 2
rounding = context._set_rounding(ROUND_HALF_EVEN)
while 1:
@ -2043,8 +2035,9 @@ def max(self, other, context=None):
if context is None:
context = getcontext()
context._rounding_decision == ALWAYS_ROUND
return ans._fix(context)
if context._rounding_decision == ALWAYS_ROUND:
return ans._fix(context)
return ans
def min(self, other, context=None):
"""Returns the smaller value.
@ -2089,8 +2082,9 @@ def min(self, other, context=None):
if context is None:
context = getcontext()
context._rounding_decision == ALWAYS_ROUND
return ans._fix(context)
if context._rounding_decision == ALWAYS_ROUND:
return ans._fix(context)
return ans
def _isinteger(self):
"""Returns whether self is an integer"""