# [Python-checkins] r67701 - in python/branches/release26-maint: Lib/decimal.py Lib/test/decimaltestdata/extra.decTest Misc/NEWS

mark.dickinson python-checkins at python.org
Thu Dec 11 10:17:41 CET 2008

```Author: mark.dickinson
Date: Thu Dec 11 10:17:40 2008
New Revision: 67701

Log:
Merged revisions 67694 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk

........
r67694 | facundo.batista | 2008-12-11 04:19:46 +0000 (Thu, 11 Dec 2008) | 6 lines

Issue #4084: Fix max, min, max_mag and min_mag Decimal methods to
give correct results in the case where one argument is a quiet NaN
and the other is a finite number that requires rounding.
Thanks Mark Dickinson.
........

Modified:
python/branches/release26-maint/   (props changed)
python/branches/release26-maint/Lib/decimal.py
python/branches/release26-maint/Lib/test/decimaltestdata/extra.decTest
python/branches/release26-maint/Misc/NEWS

Modified: python/branches/release26-maint/Lib/decimal.py
==============================================================================
--- python/branches/release26-maint/Lib/decimal.py	(original)
+++ python/branches/release26-maint/Lib/decimal.py	Thu Dec 11 10:17:40 2008
@@ -2563,10 +2563,10 @@
sn = self._isnan()
on = other._isnan()
if sn or on:
-                if on == 1 and sn != 2:
-                    return self._fix_nan(context)
-                if sn == 1 and on != 2:
-                    return other._fix_nan(context)
+                if on == 1 and sn == 0:
+                    return self._fix(context)
+                if sn == 1 and on == 0:
+                    return other._fix(context)
return self._check_nans(other, context)

c = self._cmp(other)
@@ -2605,10 +2605,10 @@
sn = self._isnan()
on = other._isnan()
if sn or on:
-                if on == 1 and sn != 2:
-                    return self._fix_nan(context)
-                if sn == 1 and on != 2:
-                    return other._fix_nan(context)
+                if on == 1 and sn == 0:
+                    return self._fix(context)
+                if sn == 1 and on == 0:
+                    return other._fix(context)
return self._check_nans(other, context)

c = self._cmp(other)
@@ -3163,10 +3163,10 @@
sn = self._isnan()
on = other._isnan()
if sn or on:
-                if on == 1 and sn != 2:
-                    return self._fix_nan(context)
-                if sn == 1 and on != 2:
-                    return other._fix_nan(context)
+                if on == 1 and sn == 0:
+                    return self._fix(context)
+                if sn == 1 and on == 0:
+                    return other._fix(context)
return self._check_nans(other, context)

c = self.copy_abs()._cmp(other.copy_abs())
@@ -3193,10 +3193,10 @@
sn = self._isnan()
on = other._isnan()
if sn or on:
-                if on == 1 and sn != 2:
-                    return self._fix_nan(context)
-                if sn == 1 and on != 2:
-                    return other._fix_nan(context)
+                if on == 1 and sn == 0:
+                    return self._fix(context)
+                if sn == 1 and on == 0:
+                    return other._fix(context)
return self._check_nans(other, context)

c = self.copy_abs()._cmp(other.copy_abs())

Modified: python/branches/release26-maint/Lib/test/decimaltestdata/extra.decTest
==============================================================================
--- python/branches/release26-maint/Lib/test/decimaltestdata/extra.decTest	(original)
+++ python/branches/release26-maint/Lib/test/decimaltestdata/extra.decTest	Thu Dec 11 10:17:40 2008
@@ -154,6 +154,23 @@
extr1302 fma 0E123 -Inf sNaN789 -> NaN Invalid_operation
extr1302 fma -Inf 0E-456 sNaN148 -> NaN Invalid_operation

+-- max/min/max_mag/min_mag bug in 2.5.2/2.6/3.0: max(NaN, finite) gave
+-- incorrect answers when the finite number required rounding; similarly
+-- for the other thre functions
+maxexponent: 999
+minexponent: -999
+precision: 6
+rounding: half_even
+extr1400 max NaN 1234567 -> 1.23457E+6 Inexact Rounded
+extr1401 max 3141590E-123 NaN1729 -> 3.14159E-117 Rounded
+extr1402 max -7.654321 -NaN -> -7.65432 Inexact Rounded
+extr1410 min -NaN -765432.1 -> -765432 Inexact Rounded
+extr1411 min 3141592 NaN -> 3.14159E+6 Inexact Rounded
+extr1420 max_mag 0.1111111 -NaN123 -> 0.111111 Inexact Rounded
+extr1421 max_mag NaN999999999 0.001234567 -> 0.00123457 Inexact Rounded
+extr1430 min_mag 9181716151 -NaN -> 9.18172E+9 Inexact Rounded
+extr1431 min_mag NaN4 1.818180E100 -> 1.81818E+100 Rounded
+
-- Tests for the is_* boolean operations
precision: 9
maxExponent: 999

Modified: python/branches/release26-maint/Misc/NEWS
==============================================================================
--- python/branches/release26-maint/Misc/NEWS	(original)
+++ python/branches/release26-maint/Misc/NEWS	Thu Dec 11 10:17:40 2008
@@ -86,6 +86,10 @@
Library
-------

+- Issue #4084: Fix max, min, max_mag and min_mag Decimal methods to
+  give correct results in the case where one argument is a quiet NaN
+  and the other is a finite number that requires rounding.
+
- Issue #4529: fix the parser module's validation of try-except-finally
statements.

```