When is min(a, b) != min(b, a)?

Steven D'Aprano steve at REMOVE-THIS-cybersource.com.au
Fri Jan 25 01:09:58 CET 2008


On Thu, 24 Jan 2008 16:51:16 +0000, Pete Forman wrote:

> Christian Heimes <lists at cheimes.de> writes:
> 
>  > Antoon Pardon wrote:
>>> That doesn't follow. The problem is not that x < nan returns False
>>> because that is correct since x isn't smaller than nan. The problem is
>>> cmp(x, nan) returning 1, because that indicates that x is greater than
>>> nan and that isn't true.
>>
>  > Please report the problem. cmp(), min() and max() don't treat NaNs
>  > right. I don't think that x < nan == False is the correct answer,
>  > too. But I've to check the IEEE 754 specs. IMHO < nan and > nan
>  > should raise an exception.
> 
> I disagree with your last sentence.  We are dealing with quiet NaNs
> which should not raise exceptions.  x < nan is well defined in IEEE, it
> is false.

I question that. The IEEE standard states that comparisons involving NaNs 
are unordered and should signal INVALID. What that means at the high 
level of x < NAN (etc.) isn't clear.

I'm having a lot of trouble finding the canonical IEEE-754 standard, so 
I'm forced to judge by implementations and third party accounts. For 
example, this is what IBM says:

http://publib.boulder.ibm.com/infocenter/lnxpcomp/v8v101/index.jsp?topic=/
com.ibm.xlf101l.doc/xlfopg/fpieee.htm

[quote]
The IEEE standard defines several exception conditions that can occur:

...

INVALID
Operations are performed on values for which the results are not defined. 
These include: 
    Operations on signaling NaN values
    ...
    Comparisons involving NaN values
[end quote]


Note that *only* sNaNs signal invalid on arithmetic operations, but 
*both* types of NaNs signal invalid on comparisons.

The same page also lists a table showing the result of such signals. I 
won't reproduce the whole table, but it states that the INVALID signal 
results in a NaN if exceptions are disabled, and no result (naturally) if 
exceptions are enabled.

SANE (Standard Apple Numerics Environment) and Apple's PowerPC Numerics 
also do the same. See for example:
http://developer.apple.com/documentation/mac/PPCNumerics/
PPCNumerics-37.html

[quote]
...when x or y is a NaN, x < y being false might tempt you to conclude 
that x >= y, so PowerPC Numerics signals invalid to help you avoid the 
pitfall.
[end quote]

Regardless of deep philosophical questions about truth, that's a great 
example of Practicality Beats Purity. And some of us think that raising 
an exception would not only be more practical, but also more pure as well.


-- 
Steven



More information about the Python-list mailing list