Kaydet (Commit) 99b55482 authored tarafından Facundo Batista's avatar Facundo Batista

Very few little improvements.

üst cb91900f
...@@ -938,15 +938,13 @@ class Decimal(object): ...@@ -938,15 +938,13 @@ class Decimal(object):
sign = 1 sign = 1
return Decimal( (sign, (0,), exp)) return Decimal( (sign, (0,), exp))
if not self: if not self:
if exp < other._exp - context.prec-1: exp = max(exp, other._exp - context.prec-1)
exp = other._exp - context.prec-1
ans = other._rescale(exp, watchexp=0, context=context) ans = other._rescale(exp, watchexp=0, context=context)
if shouldround: if shouldround:
ans = ans._fix(context) ans = ans._fix(context)
return ans return ans
if not other: if not other:
if exp < self._exp - context.prec-1: exp = max(exp, self._exp - context.prec-1)
exp = self._exp - context.prec-1
ans = self._rescale(exp, watchexp=0, context=context) ans = self._rescale(exp, watchexp=0, context=context)
if shouldround: if shouldround:
ans = ans._fix(context) ans = ans._fix(context)
...@@ -1228,7 +1226,6 @@ class Decimal(object): ...@@ -1228,7 +1226,6 @@ class Decimal(object):
if divmod and res.exp > context.prec + 1: if divmod and res.exp > context.prec + 1:
return context._raise_error(DivisionImpossible) return context._raise_error(DivisionImpossible)
ans = None
prec_limit = 10 ** context.prec prec_limit = 10 ** context.prec
while 1: while 1:
while op2.int <= op1.int: while op2.int <= op1.int:
...@@ -1454,24 +1451,25 @@ class Decimal(object): ...@@ -1454,24 +1451,25 @@ class Decimal(object):
if context is None: if context is None:
context = getcontext() context = getcontext()
prec = context.prec prec = context.prec
ans = self._fixexponents(prec, context) ans = self._fixexponents(context)
if len(ans._int) > prec: if len(ans._int) > prec:
ans = ans._round(prec, context=context) ans = ans._round(prec, context=context)
ans = ans._fixexponents(prec, context) ans = ans._fixexponents(context)
return ans return ans
def _fixexponents(self, prec, context): def _fixexponents(self, context):
"""Fix the exponents and return a copy with the exponent in bounds. """Fix the exponents and return a copy with the exponent in bounds.
Only call if known to not be a special value. Only call if known to not be a special value.
""" """
folddown = context._clamp folddown = context._clamp
Emin = context.Emin Emin = context.Emin
ans = Decimal(self) ans = self
ans_adjusted = ans.adjusted() ans_adjusted = ans.adjusted()
if ans_adjusted < Emin: if ans_adjusted < Emin:
Etiny = context.Etiny() Etiny = context.Etiny()
if ans._exp < Etiny: if ans._exp < Etiny:
if not ans: if not ans:
ans = Decimal(self)
ans._exp = Etiny ans._exp = Etiny
context._raise_error(Clamped) context._raise_error(Clamped)
return ans return ans
...@@ -1493,6 +1491,7 @@ class Decimal(object): ...@@ -1493,6 +1491,7 @@ class Decimal(object):
Emax = context.Emax Emax = context.Emax
if ans_adjusted > Emax: if ans_adjusted > Emax:
if not ans: if not ans:
ans = Decimal(self)
ans._exp = Emax ans._exp = Emax
context._raise_error(Clamped) context._raise_error(Clamped)
return ans return ans
...@@ -1508,7 +1507,6 @@ class Decimal(object): ...@@ -1508,7 +1507,6 @@ class Decimal(object):
context determines it. context determines it.
""" """
if self._is_special: if self._is_special:
ans = self._check_nans(context=context) ans = self._check_nans(context=context)
if ans: if ans:
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment