<div dir="ltr"><div class="gmail_quote"><div dir="ltr">[Steven D'Aprano]</div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">.... I'd just like to point out that <br>
given the existence of float NANs, there's a case to be made for having <br>
separate <> and != operators with != keeping the "not equal" meaning and <br>
the <> operator meaning literally "less than, or greater than".<br>
<br>
py> NAN != 23<br>
True<br>
py> NAN < 23 or NAN > 23<br>
False<br>
<br>
(I'm not making the case for this, just pointing out that it exists...)<br>
<br>
There would be precedent too: at least one of Apple's SANE maths <br>
libraries back in the 1990s had a full set of NAN-aware comparison <br>
operators including IIRC separate "not equal" and "less than or greater <br>
than" comparisons.<br>
<br>
But I think this is a corner of IEEE-754 esoterica that probably doesn't <br>
need to be a builtin operator :-)<br><br></blockquote><div>The 754 standard's section 5.7 (Comparisons) defines 26(!) distinct comparison predicates.  I bet SANE supplied all of them - and quite possibly nothing else in the world ever bothered (the standard _required_ only a relative few of them).<br><br>I never had the slightest interest in garbaging-up Python with syntax for all those, so never even mentioned it in the early days.<br><br>My secret plan ;-) was that if someone agitated for it enough to sway Guido, I'd add a<br><br>    math.ieee_compare(x, y, raise=False)<br><br>function that returned one of the four bit constants IEEE_(LESS, EQUAL, GREATER, UNORDERED} (with values 1, 2, 4, 8), and raised some spelling of "invalid operation" iff `raise` was True and at least one of the comparands was a NaN.  That's enough to build any of the standard's predicates (and a few more essentially useless ones, like "always true").<br><br>Then, e.g., for your <> above</div><div><br></div><div>def "<>"(x, y):</div><div>    return ieee_compare(x, y) & (IEEE_LESS | IEEE_GREATER) != 0</div><div><br></div><div>and != above would add IEEE_UNORDERED to the bits checked in that.</div><div><br></div><div>Then it's equal easy to build oddballs like "unordered or greater" and "only equal but raise an exception if a NaN is compared" too.<br><br>I've been quite relieved that, after all these years, nobody else seemed to care about this either :-)<br><br></div></div></div>