[Haskell-cafe] float show instances

Anthony Cowley acowley at seas.upenn.edu
Thu Nov 7 10:12:59 UTC 2013

> On Nov 7, 2013, at 3:12 PM, Evan Laforge <qdunkan at gmail.com> wrote:
> Ok, here's a bit of shameless bike-sheddery, so feel free to move on
> if you don't have time for that kind of thing.
> It seems silly, but this is something that's been bothering me for
> something like 5 years now, namely that ghc's float show instance is
> very aggressive about resorting to scientific notation for numbers
> below 1.  If you get to 0.01 it writes it as 1.0e-2.  Python and ruby,
> by comparison, have the cutoff at 1e-5.  But it's only for <1, if you
> go higher you have to get all the way up to 1.0e7 before it goes
> exponential (python and ruby are even more reluctant: 1e16 and 1e14
> respectively).
> This little detail has been a constant low-grade hassle for me because
> I don't read scientific notation fluently, and it's hard for me to see
> relative magnitudes in a big chunk of floats.  In the past I've
> resorted to copy pasting a list into a python prompt or a separate
> pretty printer program, and in the present I have my own replacement
> for Show that is less aggressive with scientific notation, in addition
> to other things.
> So I was wondering, was this a considered design choice, or just the
> preference of the person who happened to write Show Float and Show
> Double way back when?  Are there people who read scientific notation
> just as easily as positional (and if so, would they prefer to see 100
> as 1e3)?  Is there hope that if I look at it enough maybe someday
> it'll be clear to me too?
> I'm not actually expecting anyone will say "why didn't we think of
> that, let's change it right away", but I'm curious about how it came
> about, and whether other people have resorted to as drastic measures
> as I have.
> As an aside, I've noticed that when I'm debugging, the formatting of
> the output is very important.  Surprisingly so.  It's worth it for me
> to spend extra time making test and debugging output minimal and
> clear, otherwise my brain is already overtaxed trying to understand
> the problem, and just can't handle extra load like skipping irrelevant
> data, figuring out scientific notation, and even trying to figure out
> where the breaks are in un-spaced output.  Maybe a personal quirk.

I, too, am not a fan of those default Show instances for readability reasons. The silver lining is that this causes me to reach for printf sooner rather than later, which lets me format things appropriately at an early stage.


More information about the Haskell-Cafe mailing list