float("nan") in set or as key

Chris Angelico rosuav at gmail.com
Mon Jun 6 01:10:02 EDT 2011


On Mon, Jun 6, 2011 at 2:59 PM, Steven D'Aprano
<steve+comp.lang.python at pearwood.info> wrote:
> On Mon, 06 Jun 2011 14:11:03 +1000, Chris Angelico wrote:
>> So does this mean that:
>> (with signalling NANs) should trap on the second line but not the first?

BTW, by "should" I meant "would if Python's float were 100% IEEE-754 compliant".

> I don't think that there's any way to tell IEEE-754 for operations on
> NANs to return signalling NANs. As I understand it, the idea is:
>
>
> - if you want exceptions to signal, set the appropriate traps;
> - if you want NANs that propagate through your calculation, clear the
> traps and you'll get propagating NANs;
> - if you need to detect the presence of a NAN in your calculation, you
> can inspect the flags at any time and take whatever action you want;
> - and if you want a signalling NAN, you have to inject it yourself into
> your calculation, and then avoid using it.

That makes plausible sense, at least. Get traps or propagate NANs.

> I'm lead to believe that signalling NANs were added to satisfy politics,
> but apart from being slightly useful for marking uninitialised memory
> before use, nobody actually uses them in practice.

I'm curious as to what sort of politics led to that.

> Wanna see something cool? You can check for inexact arithmetic:
> Not surprisingly, by default that's turned off :)

Neat. That's going to be off trapping pretty much all the time, but I
can imagine circumstances where you check the status at the end.

ChrisA



More information about the Python-list mailing list