mirror of
https://github.com/python/cpython.git
synced 2025-11-25 21:11:09 +00:00
Reapply r68191.
This commit is contained in:
parent
f4d8597a59
commit
b7e835b820
1 changed files with 56 additions and 56 deletions
112
Lib/decimal.py
112
Lib/decimal.py
|
|
@ -243,7 +243,7 @@ class DivisionByZero(DecimalException, ZeroDivisionError):
|
|||
"""
|
||||
|
||||
def handle(self, context, sign, *args):
|
||||
return _Infsign[sign]
|
||||
return _SignedInfinity[sign]
|
||||
|
||||
class DivisionImpossible(InvalidOperation):
|
||||
"""Cannot perform the division adequately.
|
||||
|
|
@ -341,15 +341,15 @@ class Overflow(Inexact, Rounded):
|
|||
def handle(self, context, sign, *args):
|
||||
if context.rounding in (ROUND_HALF_UP, ROUND_HALF_EVEN,
|
||||
ROUND_HALF_DOWN, ROUND_UP):
|
||||
return _Infsign[sign]
|
||||
return _SignedInfinity[sign]
|
||||
if sign == 0:
|
||||
if context.rounding == ROUND_CEILING:
|
||||
return _Infsign[sign]
|
||||
return _SignedInfinity[sign]
|
||||
return _dec_from_triple(sign, '9'*context.prec,
|
||||
context.Emax-context.prec+1)
|
||||
if sign == 1:
|
||||
if context.rounding == ROUND_FLOOR:
|
||||
return _Infsign[sign]
|
||||
return _SignedInfinity[sign]
|
||||
return _dec_from_triple(sign, '9'*context.prec,
|
||||
context.Emax-context.prec+1)
|
||||
|
||||
|
|
@ -1204,12 +1204,12 @@ class Decimal(object):
|
|||
if self._isinfinity():
|
||||
if not other:
|
||||
return context._raise_error(InvalidOperation, '(+-)INF * 0')
|
||||
return _Infsign[resultsign]
|
||||
return _SignedInfinity[resultsign]
|
||||
|
||||
if other._isinfinity():
|
||||
if not self:
|
||||
return context._raise_error(InvalidOperation, '0 * (+-)INF')
|
||||
return _Infsign[resultsign]
|
||||
return _SignedInfinity[resultsign]
|
||||
|
||||
resultexp = self._exp + other._exp
|
||||
|
||||
|
|
@ -1259,7 +1259,7 @@ class Decimal(object):
|
|||
return context._raise_error(InvalidOperation, '(+-)INF/(+-)INF')
|
||||
|
||||
if self._isinfinity():
|
||||
return _Infsign[sign]
|
||||
return _SignedInfinity[sign]
|
||||
|
||||
if other._isinfinity():
|
||||
context._raise_error(Clamped, 'Division by infinity')
|
||||
|
|
@ -1362,7 +1362,7 @@ class Decimal(object):
|
|||
ans = context._raise_error(InvalidOperation, 'divmod(INF, INF)')
|
||||
return ans, ans
|
||||
else:
|
||||
return (_Infsign[sign],
|
||||
return (_SignedInfinity[sign],
|
||||
context._raise_error(InvalidOperation, 'INF % x'))
|
||||
|
||||
if not other:
|
||||
|
|
@ -1510,7 +1510,7 @@ class Decimal(object):
|
|||
if other._isinfinity():
|
||||
return context._raise_error(InvalidOperation, 'INF // INF')
|
||||
else:
|
||||
return _Infsign[self._sign ^ other._sign]
|
||||
return _SignedInfinity[self._sign ^ other._sign]
|
||||
|
||||
if not other:
|
||||
if self:
|
||||
|
|
@ -1765,12 +1765,12 @@ class Decimal(object):
|
|||
if not other:
|
||||
return context._raise_error(InvalidOperation,
|
||||
'INF * 0 in fma')
|
||||
product = _Infsign[self._sign ^ other._sign]
|
||||
product = _SignedInfinity[self._sign ^ other._sign]
|
||||
elif other._exp == 'F':
|
||||
if not self:
|
||||
return context._raise_error(InvalidOperation,
|
||||
'0 * INF in fma')
|
||||
product = _Infsign[self._sign ^ other._sign]
|
||||
product = _SignedInfinity[self._sign ^ other._sign]
|
||||
else:
|
||||
product = _dec_from_triple(self._sign ^ other._sign,
|
||||
str(int(self._int) * int(other._int)),
|
||||
|
|
@ -2120,7 +2120,7 @@ class Decimal(object):
|
|||
if not self:
|
||||
return context._raise_error(InvalidOperation, '0 ** 0')
|
||||
else:
|
||||
return _Dec_p1
|
||||
return _One
|
||||
|
||||
# result has sign 1 iff self._sign is 1 and other is an odd integer
|
||||
result_sign = 0
|
||||
|
|
@ -2142,19 +2142,19 @@ class Decimal(object):
|
|||
if other._sign == 0:
|
||||
return _dec_from_triple(result_sign, '0', 0)
|
||||
else:
|
||||
return _Infsign[result_sign]
|
||||
return _SignedInfinity[result_sign]
|
||||
|
||||
# Inf**(+ve or Inf) = Inf; Inf**(-ve or -Inf) = 0
|
||||
if self._isinfinity():
|
||||
if other._sign == 0:
|
||||
return _Infsign[result_sign]
|
||||
return _SignedInfinity[result_sign]
|
||||
else:
|
||||
return _dec_from_triple(result_sign, '0', 0)
|
||||
|
||||
# 1**other = 1, but the choice of exponent and the flags
|
||||
# depend on the exponent of self, and on whether other is a
|
||||
# positive integer, a negative integer, or neither
|
||||
if self == _Dec_p1:
|
||||
if self == _One:
|
||||
if other._isinteger():
|
||||
# exp = max(self._exp*max(int(other), 0),
|
||||
# 1-context.prec) but evaluating int(other) directly
|
||||
|
|
@ -2187,7 +2187,7 @@ class Decimal(object):
|
|||
if (other._sign == 0) == (self_adj < 0):
|
||||
return _dec_from_triple(result_sign, '0', 0)
|
||||
else:
|
||||
return _Infsign[result_sign]
|
||||
return _SignedInfinity[result_sign]
|
||||
|
||||
# from here on, the result always goes through the call
|
||||
# to _fix at the end of this function.
|
||||
|
|
@ -2707,9 +2707,9 @@ class Decimal(object):
|
|||
"""
|
||||
# if one is negative and the other is positive, it's easy
|
||||
if self._sign and not other._sign:
|
||||
return _Dec_n1
|
||||
return _NegativeOne
|
||||
if not self._sign and other._sign:
|
||||
return _Dec_p1
|
||||
return _One
|
||||
sign = self._sign
|
||||
|
||||
# let's handle both NaN types
|
||||
|
|
@ -2719,51 +2719,51 @@ class Decimal(object):
|
|||
if self_nan == other_nan:
|
||||
if self._int < other._int:
|
||||
if sign:
|
||||
return _Dec_p1
|
||||
return _One
|
||||
else:
|
||||
return _Dec_n1
|
||||
return _NegativeOne
|
||||
if self._int > other._int:
|
||||
if sign:
|
||||
return _Dec_n1
|
||||
return _NegativeOne
|
||||
else:
|
||||
return _Dec_p1
|
||||
return _Dec_0
|
||||
return _One
|
||||
return _Zero
|
||||
|
||||
if sign:
|
||||
if self_nan == 1:
|
||||
return _Dec_n1
|
||||
return _NegativeOne
|
||||
if other_nan == 1:
|
||||
return _Dec_p1
|
||||
return _One
|
||||
if self_nan == 2:
|
||||
return _Dec_n1
|
||||
return _NegativeOne
|
||||
if other_nan == 2:
|
||||
return _Dec_p1
|
||||
return _One
|
||||
else:
|
||||
if self_nan == 1:
|
||||
return _Dec_p1
|
||||
return _One
|
||||
if other_nan == 1:
|
||||
return _Dec_n1
|
||||
return _NegativeOne
|
||||
if self_nan == 2:
|
||||
return _Dec_p1
|
||||
return _One
|
||||
if other_nan == 2:
|
||||
return _Dec_n1
|
||||
return _NegativeOne
|
||||
|
||||
if self < other:
|
||||
return _Dec_n1
|
||||
return _NegativeOne
|
||||
if self > other:
|
||||
return _Dec_p1
|
||||
return _One
|
||||
|
||||
if self._exp < other._exp:
|
||||
if sign:
|
||||
return _Dec_p1
|
||||
return _One
|
||||
else:
|
||||
return _Dec_n1
|
||||
return _NegativeOne
|
||||
if self._exp > other._exp:
|
||||
if sign:
|
||||
return _Dec_n1
|
||||
return _NegativeOne
|
||||
else:
|
||||
return _Dec_p1
|
||||
return _Dec_0
|
||||
return _One
|
||||
return _Zero
|
||||
|
||||
|
||||
def compare_total_mag(self, other):
|
||||
|
|
@ -2804,11 +2804,11 @@ class Decimal(object):
|
|||
|
||||
# exp(-Infinity) = 0
|
||||
if self._isinfinity() == -1:
|
||||
return _Dec_0
|
||||
return _Zero
|
||||
|
||||
# exp(0) = 1
|
||||
if not self:
|
||||
return _Dec_p1
|
||||
return _One
|
||||
|
||||
# exp(Infinity) = Infinity
|
||||
if self._isinfinity() == 1:
|
||||
|
|
@ -2960,15 +2960,15 @@ class Decimal(object):
|
|||
|
||||
# ln(0.0) == -Infinity
|
||||
if not self:
|
||||
return _negInf
|
||||
return _NegativeInfinity
|
||||
|
||||
# ln(Infinity) = Infinity
|
||||
if self._isinfinity() == 1:
|
||||
return _Inf
|
||||
return _Infinity
|
||||
|
||||
# ln(1.0) == 0.0
|
||||
if self == _Dec_p1:
|
||||
return _Dec_0
|
||||
if self == _One:
|
||||
return _Zero
|
||||
|
||||
# ln(negative) raises InvalidOperation
|
||||
if self._sign == 1:
|
||||
|
|
@ -3040,11 +3040,11 @@ class Decimal(object):
|
|||
|
||||
# log10(0.0) == -Infinity
|
||||
if not self:
|
||||
return _negInf
|
||||
return _NegativeInfinity
|
||||
|
||||
# log10(Infinity) = Infinity
|
||||
if self._isinfinity() == 1:
|
||||
return _Inf
|
||||
return _Infinity
|
||||
|
||||
# log10(negative or -Infinity) raises InvalidOperation
|
||||
if self._sign == 1:
|
||||
|
|
@ -3096,7 +3096,7 @@ class Decimal(object):
|
|||
|
||||
# logb(+/-Inf) = +Inf
|
||||
if self._isinfinity():
|
||||
return _Inf
|
||||
return _Infinity
|
||||
|
||||
# logb(0) = -Inf, DivisionByZero
|
||||
if not self:
|
||||
|
|
@ -3253,7 +3253,7 @@ class Decimal(object):
|
|||
return ans
|
||||
|
||||
if self._isinfinity() == -1:
|
||||
return _negInf
|
||||
return _NegativeInfinity
|
||||
if self._isinfinity() == 1:
|
||||
return _dec_from_triple(0, '9'*context.prec, context.Etop())
|
||||
|
||||
|
|
@ -3276,7 +3276,7 @@ class Decimal(object):
|
|||
return ans
|
||||
|
||||
if self._isinfinity() == 1:
|
||||
return _Inf
|
||||
return _Infinity
|
||||
if self._isinfinity() == -1:
|
||||
return _dec_from_triple(1, '9'*context.prec, context.Etop())
|
||||
|
||||
|
|
@ -5540,15 +5540,15 @@ def _format_align(body, spec_dict):
|
|||
##### Useful Constants (internal use only) ################################
|
||||
|
||||
# Reusable defaults
|
||||
_Inf = Decimal('Inf')
|
||||
_negInf = Decimal('-Inf')
|
||||
_Infinity = Decimal('Inf')
|
||||
_NegativeInfinity = Decimal('-Inf')
|
||||
_NaN = Decimal('NaN')
|
||||
_Dec_0 = Decimal(0)
|
||||
_Dec_p1 = Decimal(1)
|
||||
_Dec_n1 = Decimal(-1)
|
||||
_Zero = Decimal(0)
|
||||
_One = Decimal(1)
|
||||
_NegativeOne = Decimal(-1)
|
||||
|
||||
# _Infsign[sign] is infinity w/ that sign
|
||||
_Infsign = (_Inf, _negInf)
|
||||
# _SignedInfinity[sign] is infinity w/ that sign
|
||||
_SignedInfinity = (_Infinity, _NegativeInfinity)
|
||||
|
||||
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue