[Python-ideas] Hexadecimal floating literals
Steven D'Aprano
steve at pearwood.info
Tue Sep 12 07:28:51 EDT 2017
On Tue, Sep 12, 2017 at 09:23:04AM +0200, Victor Stinner wrote:
> 2017-09-12 3:48 GMT+02:00 Steven D'Aprano <steve at pearwood.info>:
> >> k = float("0x1.2492492492492p-3") # 1/7
> >
> > Why wouldn't you just write 1/7?
>
> 1/7 is irrational, so it's not easy to get the "exact value" for a
> 64-bit IEEE 754 double float.
1/7 is not irrational. It is the ratio of 1 over 7, by definition it is
a rational number. Are you thinking of square root of 7?
1/7 gives the exact 64-bit IEEE 754 float closest to the true rational
number 1/7. And with the keyhole optimizer in recent versions of Python,
you don't even pay a runtime cost.
py> (1/7).hex()
'0x1.2492492492492p-3'
I do like the idea of having float hex literals, and supporting them in
float itself (although we do already have float.fromhex) but I must
admit I'm struggling for a use-case.
But perhaps "C allows it now, we should too" is a good enough reason.
> I chose it because it's easy to write. Maybe math.pi is a better example :-)
>
> >>> math.pi.hex()
> '0x1.921fb54442d18p+1'
3.141592653589793 is four fewer characters to type, just as accurate,
and far more recognisable.
--
Steve
More information about the Python-ideas
mailing list