[Python-Dev] PyObject_RichCompareBool identity shortcut (original) (raw)

Alexander Belopolsky alexander.belopolsky at gmail.com
Wed Apr 27 19:16:15 CEST 2011


On Wed, Apr 27, 2011 at 12:28 PM, Raymond Hettinger <raymond.hettinger at gmail.com> wrote:

On Apr 27, 2011, at 7:53 AM, Guido van Rossum wrote:

Maybe we should just call off the odd NaN comparison behavior? I'm reluctant to suggest changing such enshrined behavior. ISTM, the current state of affairs is reasonable. Exotic objects are allowed to generate exotic behaviors but consumers of those objects are free to ignore some of those behaviors by making reasonable assumptions about how an object should behave.

Unfortunately NaNs are not that exotic. They can be silently produced in calculations and lead to hard to find errors. For example:

x = 1e300*1e300 x - x nan

This means that every program dealing with float data has to detect nans at every step and handle them correctly. This in turn makes it impossible to write efficient code that works equally well with floats and integers.

Note that historically, Python was trying hard to prevent production of non-finite floats. AFAICT, none of the math functions would produce inf or nan. I am not sure why arithmetic operations are different. For example:

1e300*1e300 inf

but

1e300**2 Traceback (most recent call last): File "", line 1, in OverflowError: (34, 'Result too large')

and

math.pow(1e300,2) Traceback (most recent call last): File "", line 1, in OverflowError: math range error



More information about the Python-Dev mailing list