On 12/29/19 9:42 PM, David Mertz wrote:
On Sun, Dec 29, 2019, 9:23 PM Andrew Barnert
Here it is. I could save a line by not using the 'else'.
def total_order(x):
if is_nan(x):
return (math.copysign(1, x), x)
else:
return (0, x)
This doesn’t give you IEEE total order. Under what circumstances
would you prefer this to, say, Decimal.compare_total, which does?
How does this differ from IEEE? I'm not being rhetorical, I really
thought that was their order. But I haven't looked carefully.
IEEE total_order puts NaN as bigger than infinity, and -NaN as less than
-inf.
One simple way to implement it is to convert the representaton to a 64
bit signed integer (not its value, but its representation) and if the
sign bit is set, complement the bottom 63 bits (because floats are
signed-magnitude). For pure python code, I don't know how hard it is to
get the representation of a float as a 64 bit integer. In C or Assembly
it is fairly easy as you can easily get around the type system, but I
don't know python well enough to do it.
--
Richard Damon
_______________________________________________
Python-ideas mailing list -- python-ideas@python.org
To unsubscribe send an email to python-ideas-le...@python.org
https://mail.python.org/mailman3/lists/python-ideas.python.org/
Message archived at
https://mail.python.org/archives/list/python-ideas@python.org/message/N2RRRF37VSHVBGL35OA5AMBVG2E7IV2Q/
Code of Conduct: http://python.org/psf/codeofconduct/