Comparisons of incompatible types

geremy condra debatem1 at gmail.com
Wed Dec 8 22:56:43 EST 2010


On Wed, Dec 8, 2010 at 1:01 PM, John Nagle <nagle at animats.com> wrote:
> On 12/7/2010 3:59 PM, Mark Wooding wrote:
>>>
>>> Exactly one of
>>> >
>>> >       a>  b
>>> >       a = b
>>> >       a<  b
>>> >
>>> >  is true, or an type exception must be raised.
>>
>> This will get the numerical people screaming.  Non-signalling NaNs are
>> useful, and they don't obey these axioms.
>
>   As a sometime numerical person, I've been screaming at this from
> the other side.   The problem with comparing non-signalling NaNs is that
> eventually, the program has to make a control flow decision, and it
> may not make it correctly.
>
>   I used to do dynamic simulation engines for animation.  I was
> probably the first person to get ragdoll physics to work right,
> back in 1996-1997.  In hard collisions, the program would get
> floating point overflows, and I had to abort the interation, back
> up, cut the time step down, and go forward again, until the time
> step was small enough to allow stable integration.  This was
> under Windows on x86, where it's possible, in a Windows-dependent
> way, to catch signalling NaNs and turn the hardware exception into
> a C++ exception.  If the computation just plowed ahead with
> non-signalling NaNs, with a check at the end, it could go wrong
> and produce bad results, because incorrect branches would be taken
> and the final bogus results might not contain NaNs.
>
>   I personally think that comparing NaN with numbers or other
> NaNs should raise an exception.  There's no valid result for
> such comparisons.

This, in big letters.

Geremy Condra



More information about the Python-list mailing list