New submission from Mark Dickinson: For Python 3.0 the decimal module got rich comparisons. Those comparisons have somewhat unconventional behavior with respect to NaNs, as seen below: <, <= and == comparisons involving NaNs always return False, while >, >= and != comparisons always return True.
The Decimal specification has nothing helpful to say about comparisons involving NaNs. But reading IEEE- 754r (on which the Decimal specification is closely based), there are two possible options: (1) have comparisons involving NaNs (except for !=) raise InvalidOperation in the context, and hence give a Python exception (assuming that InvalidOperation isn't trapped.) (2) have comparisons involving NaNs always return False (except for !=, which always returns True). I think either of these is better than the current behavior. (2) seems like the better option, for a couple of reasons: first, it's the way that Python floats currently work, and second, there might be issues with list membership testing if equality comparisons involving NaNs raised an exception or returned a NaN. Since Mike Cowlishaw is intimately involved with both the Decimal specification and the IEEE-754r process, I thought it might be useful to have his opinion on this; his main recommendation was to have the Decimal type do the same as the float type. The attached patch makes <, <=, >, >= and == comparisons involving NaNs always return False, and != comparisons always return True. It also renames __cmp__ to _cmp and adds a few tests for the new behavior. Here's how NaN comparisons currently work: Python 3.0a2+ (py3k:60470M, Jan 30 2008, 23:11:40) [GCC 4.0.1 (Apple Inc. build 5465)] on darwin Type "help", "copyright", "credits" or "license" for more information. >>> from decimal import * >>> n = Decimal("nan") >>> i = Decimal("inf") >>> n < n False >>> n > n True >>> i < n False >>> i > n True See also issue #1514428. ---------- assignee: facundobatista components: Library (Lib) files: richcmp.patch keywords: patch messages: 61884 nosy: facundobatista, marketdickinson severity: minor status: open title: Make Decimal comparisons with NaN less arbitrary type: behavior versions: Python 3.0 Added file: http://bugs.python.org/file9337/richcmp.patch __________________________________ Tracker <[EMAIL PROTECTED]> <http://bugs.python.org/issue1979> __________________________________ _______________________________________________ Python-bugs-list mailing list Unsubscribe: http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com